0

我不知道如何正确删除和重组节点。有人可以解释我做错了什么以及如何解决吗?

我尝试阅读其他帖子,但找不到与我相比的帖子。

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;
4

2 回答 2

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列表外的指针,也可能是列表->next内的指针之一。

于 2013-05-15T16:23:50.873 回答
0

你需要区分两种情况:

如果 index_del 为 0,则必须将 head 设置为 head->next,否则必须设置一项的 next-member:

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;
于 2013-05-15T16:05:38.720 回答