给你个简单的。
你可以尝试自己手动在纸上画一个链表,你就比较清楚了。
我学链表和双链表的时候就这么干的,只是后来被栈给虐了,才发现自己的基础不牢,灰溜溜的滚回来补基础。
用两根指针遍历链表,假设为this和next
this保存当前节点,next指向this->next。
也就是说,你在删除那个节点之前,this->next 应该调整,指向next->next.
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE {
int Value;
struct NODE *Next;
}Node;
void PrintList( Node **RootKP );
int FoundList( Node **RootKP, int value );
void DeleteList( Node *RootP );
void Delet( Node **RootKP, int value );
int FoundList( Node **RootKP, int value )
{
Node *Temp;
Node *P;
while( NULL != ( P = *RootKP ) && value > P->Value )
{
if( value == P->Value )
return 0;
RootKP = &P->Next;
}
Temp = (Node *)malloc( sizeof(Node) );
if( NULL == Temp )
return 0;
Temp->Value = value;
Temp->Next = P;
*RootKP = Temp;
return 1;
}
void Delet( Node **RootKP , int value )
{
Node *P,*TempCell;
while( NULL != ( P = *RootKP ) && value != P->Value )
RootKP = &P->Next;
TempCell = P;
*RootKP = TempCell->Next;
free( TempCell );
}
void PrintList( Node **RootKP )
{
Node *P;
while( NULL != ( P = *RootKP ) )
{
printf("%d\n",P->Value);
RootKP = &P->Next;
}
}
void DeleteList( Node *RootP )
{
Node *Temp, *P;
Temp = RootP->Next;
RootP->Next = NULL;
while( NULL != Temp )
{
P = Temp->Next;
free( Temp );
Temp = P;
}
}
[此贴子已经被作者于2017-3-14 17:34编辑过]