读书人

为何小弟我的删除操作对第一个结点无

发布时间: 2013-06-26 14:29:32 作者: rapoo

为何我的删除操作,对第一个结点无效,其余正常。
/*定点删除节点*/
Item*Delete_item(Item *head,int select_num)

{
system("cls");

Item * p1,* p2;

if(head == NULL)/*用来检查链表是否被创建*/

{
printf("\nlist null!\n");

return head;

}

p1 = head;

while(select_num!=p1->num && p1->next!=NULL)

{
p2=p1;

p1=p1->next;
}

if(select_num==p1->num)

{
if(p1==head)

{
head = p1->next;/*将第二个节点*(也就是p1的后继)赋给head*/

return head;
}

else

p2->next = p1->next;

}

return head;

} 链表
[解决办法]
head结点一般是存放数据的,只是为了方便链表操作的,对于带头结点的链表来说,第一个元素是head->next
[解决办法]
if(p1==head)

{
head = p1->next;/*将第二个节点*(也就是p1的后继)赋给head*/

return head;
}
改成head->next=p1->next;试试
[解决办法]

引用:
Quote: 引用:

if(p1==head)

{
head = p1->next;/*将第二个节点*(也就是p1的后继)赋给head*/

return head;
}
改成head->next=p1->next;试试


还是不行,第一个结点删除不了,数据仍在。哎...我纠结好久了

看逻辑好像没错,可能是其它地方错了。你在if(p1 == head)里加个打印,用删除head测试,看看里面有没有执行。

[解决办法]
你的节点的num成员是怎样的,是1,2,3...这样吗?如果select_num没有匹配到呢?你的程序还不完善。
[解决办法]
感觉是调用方的问题吧,函数返回值没利用,还是原来的表头...

读书人网 >C语言

热点推荐