我该如何去除链接列表中的节点?C从链表中删除节点
这里是我的代码:
void RemoveNode(Node * node, Node ** head) {
if (strcmp(node->state, (*(*head)->next).state) == 0) {
Node * temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node * current = (*head)->next;
Node * previous = *head;
while (current != NULL && previous != NULL) {
if (strcmp(node->state, (*current->next).state) == 0) {
Node * temp = current;
previous->next = current->next;
free(temp);
return;
}
current = current->next;
previous = previous->next;
}
return;
}
但我不断收到赛格故障。
我觉得我在做一些愚蠢的事情....任何想法?
为什么'previous = previous-> next'而不是'previous = current'在重新分配当前之前? –
另外,如果出现段错误,请在调试器中运行程序。它会在你遇到问题的地方停下来,让你检查一下调用堆栈和变量。至少你应该编辑你的问题以包含调用堆栈,并指出在提供的代码中崩溃发生的位置。 –
另外,你是否总是*有一个有效的'(* head) - > next'指针?如果清单是空的呢?如果列表中只有一个节点会怎么样? –