错误示范
struct node * DelNode(struct node*head,int x)
{
if (head==NULL) //1、空链表
{
printf("空链表,无可删\n");
exit(0);
}
struct node* p=head;
struct node* pre=NULL;
int find=0;
while (p!=NULL)
{
if (p->data==x)
{
find = 1;
break;
}
pre = p; //pre记录目标节点的前一个
p=p->next;
}
if (find==0) //2、没有要找的节点
{
printf("No this data\n");
exit(0);
}
if (p->next==NULL) //要找的节点在末尾
{
if (pre==NULL) //只有一个节点
{
head = NULL;
}
else
{
pre->next = NULL;//末尾
}
free(p);
}
else //要找的不在末尾 这种处理 能包含首节点吗??当然不能 首节点则pre==NULL
{
pre->next=p->next;
free(p);
}
return head;
}
分几类
/*
1、空链表
2、没有找到目标
3、首节点
4、尾节点
5、中间节点
注意 首节点的处理是让head=head->next;包含了只有一个节点的情况
*/