我无法弄清楚如何正确删除和重新组织节点。有人可以解释我做错了什么以及如何解决它?
我试过阅读其他帖子,但我找不到与我相比的帖子。
printf("Enter index number of person to be deleted=\n");
scanf("%d", &index_del);
t = head;
while(t->index != index_del)
{
t = t->next;
}
t1 = t->next;
t->next = t1->next; ////////////////////breaks here somewhere
free(t1);
break;
答案 0 :(得分:1)
struct node *tmp, **pp;
int index_del;
scanf("%d", &index_del);
for (pp = &head; *pp; )
if ((*pp)->index != index_del) {pp = &(*pp)->next; continue; }
tmp = *pp;
*pp = tmp->next;
free(tmp);
}
index_del
的多个节点(如果这些节点应该存在)诀窍在于:唯一需要改变的是指向要删除的节点的指针。这可以是列表外的head
指针,也可以是{{1列表中的指针。
答案 1 :(得分:0)
您需要区分两种情况:
如果index_del为0,则必须设置头对头 - >接下来,否则你必须设置上一个项的下一个成员:
printf("Enter index number of person to be deleted=\n");
scanf("%d", &index_del);
if (index_del == 0)
{
t = head->next;
free(head);
head = t;
}
else
{
t = head;
while(t->index != index_del)
{
p = t;
t = t->next;
}
// t is the item to delete, p is the item before t
p->next = t->next;
free(t);
break;