0
我想创建一个链表。每个节点将保存一个结构和一个指向下一个节点的指针。当试图从列表中间删除一个节点时,由于分段错误,程序停止。我试着用这几种不同的方法。在迭代到我想要删除的节点后,这里是我尝试使用的algorythms。从链表中删除节点
1.在要删除的节点之后,设置先前节点的“下一个”指针。
// example
node_t *current = head;
while(current->next != NULL) {
if(current->next->b.y <= 5) {
current->next = current->next->next; // first idea, didn't work
}
current = current->next;
}
这,没有工作。所以我将它调整为
1.创建一个指向名为temp的节点的指针。
2.将要删除的节点复制到temp。
3.将先前节点的'下一个'指针设置为临时'下一个'指针。
4.free临时
// example
node_t *current = head;
while(current->next != NULL) {
if(current->next->b.y <= 5) {
node_t *temp;
temp = current->next;
current->next = temp->next;
free(temp);
}
current = current->next;
}
它仍然无法正常工作。我真的不知道什么是错的,因为对我来说,它看起来非常合理。我知道我必须弄清楚我是如何初始化指针的,或者如何删除节点。如果有人能告诉我为什么代码不能正常工作,我可以修复它。
你可以显示node_t结构吗? – Coconop
如果入口处有'head == NULL'这两个片段都有问题。此外,你不处理你需要删除头节点的情况(所以'head-> by <= 5'。你是否浏览了页面右边的相关问题以寻求帮助? –
@JonathanLeffler I因为某种原因,在学术界受到重创的过度曝光(和imnsho毫无价值)设计,或者它只是一个bug而已= P – WhozCraig