-1

所以这就是问题所在。我正在尝试删除链表的第一个节点,不幸的是我仅限于使用:

int delete(node* head, int i)

因此,与其他线程推荐的做法不同,我无法返回节点或在参数中使用 **node。在删除之前和之后打印集合输出 0 而不是第一个节点:

//before
 12, 1, 14, 
//after
  0, 1, 14,

该函数旨在删除任何节点,但我被困在标头值等于 i 的部分。delete这是处理第一个节点的函数的代码片段:

int delete(node * head, int i) {
   node * current;
   current=head;
   while (current){
       if((current=head) && (head->value=i)){
           head=current->next;
           free(current);
           current=NULL;
           break;
       }
...
   }
   return 0;
}

提前致谢。

4

1 回答 1

2

不是从链表中删除第一个节点,而是存储第二个节点的值,然后删除第二个节点。

然后简单地将第二个节点的存储值复制到第一个节点中。而且,你很高兴。

例子:

初始列表 - 12、1、14

存储1和删除第二个节点,使其变为:

12、14

现在复制1到第一个节点

1, 14

因此,有效地删除了链表的第一个节点。

于 2013-10-20T13:22:37.430 回答