为何我的删除操作,对第一个结点无效,其余正常。
/*定点删除节点*/
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;试试
[解决办法]
看逻辑好像没错,可能是其它地方错了。你在if(p1 == head)里加个打印,用删除head测试,看看里面有没有执行。
[解决办法]
你的节点的num成员是怎样的,是1,2,3...这样吗?如果select_num没有匹配到呢?你的程序还不完善。
[解决办法]
感觉是调用方的问题吧,函数返回值没利用,还是原来的表头...