所以这就是问题所在。我正在尝试删除链表的第一个节点,不幸的是我只能使用:
int delete(node* head, int i)
因此,与其他线程建议的不同,我无法在参数中返回节点或使用**节点。在删除之前和之后打印集合输出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;
}
提前致谢。
答案 0 :(得分:2)
不是从链表中删除第一个节点,而是存储第二个节点的值,然后删除第二个节点。
然后只需将第二个节点的存储值复制到第一个节点即可。而且,你很高兴。
示例:
Intitial list - 12,1,14
存储1
并删除第二个节点,使其变为:
12,14
现在将1
复制到第一个节点
1,14
因此,有效地删除了链表的第一个节点。