C 删除链接列表的第一个节点

C 删除链接列表的第一个节点,c,pointers,linked-list,C,Pointers,Linked List,这就是问题所在。我正在尝试删除链接列表的第一个节点,不幸的是,我仅限于使用: int delete(node* head, int i) 因此,与其他线程建议的操作不同,我不能在参数中返回节点或使用**节点。在删除之前和之后打印集合将输出0,而不是第一个节点: //before 12, 1, 14, //after 0, 1, 14, int delete(node * head, int i) { node * current; current=head; whi

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

int delete(node* head, int i)
因此,与其他线程建议的操作不同,我不能在参数中返回节点或使用**节点。在删除之前和之后打印集合将输出0,而不是第一个节点:

//before
 12, 1, 14, 
//after
  0, 1, 14,
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;
}
该函数被设计为删除任何节点,但我仍然停留在头的值等于I的部分。下面是函数
delete
中的一段代码,该函数处理第一个节点:

//before
 12, 1, 14, 
//after
  0, 1, 14,
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;
}

提前谢谢

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

然后简单地将第二个节点的存储值复制到第一个节点中。还有,你可以走了

例如:

初始列表-12、1、14

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

12、14

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

1,14


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

如果
无法返回节点或使用**node
,您希望如何更改
head的值?我最初的想法是一样的。不幸的是,我的任务限制了我使用该函数。@Kunal:提示:删除第二个节点…@OliCharlesworth如果只有一个节点怎么办?@zubergu:那你就有问题了;)绝对没有想到。我会试试,让你知道:)谢谢!太棒了,成功了!我很快就会发布我的最终答案。多谢各位@如果列表中只有一个节点怎么办?