【发布时间】:2013-08-30 05:38:30
【问题描述】:
如何从链表中删除节点?
这是我的代码:
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指针吗?如果列表为空怎么办?如果列表中只有一个节点怎么办? -
我不明白与“下一个”节点的比较。似乎某些节点可能会丢失,是的,可能会在下一个 ptr 为 NULL 的情况下运行 rails。
标签: c pointers linked-list nodes