c - 删除链表的第一个节点

标签 c pointers linked-list

所以问题来了。我正在尝试删除链表的第一个节点,不幸的是我只能使用:

int delete(node* head, int i)

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

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

该函数旨在删除任何节点,但我被困在 header 值等于 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;
}

提前致谢。

最佳答案

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

然后只需将第二个节点的存储值复制到第一个节点即可。而且,你可以走了。

示例:

Intitial list - 12, 1, 14

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

12, 14

现在将 1 复制到第一个节点

1, 14

因此,链表的第一个节点实际上被删除了。

关于c - 删除链表的第一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477605/

相关文章:

c++ - 从#define 到函数

c++ - 请帮我解决这个意外的输出

c - 从链接列表中删除相似的项目

c++ - 同时使多个指针为 NULL

pointers - 分配嵌入的 Struct 类型值

c - 使用 free() 释放内存不起作用

C++链表删除所有

c++ - 为什么 const char[] 和 const char* 的比较不同?

c - 寻找平均值

c - 交换数组内的奇数和偶数,C