【发布时间】:2017-08-25 00:52:39
【问题描述】:
我正在编写一个从链表中删除特定节点的函数。该功能适用于大多数情况,但当要删除的节点是头节点或链表中的唯一节点时,该功能不起作用。当这种情况发生时,我尝试将电流设置为等于 NULL,但这会产生分段错误,我的逻辑哪里错了?
void deleteNodeAfter(Node *head, Node *delete) {
bool remove = false;
Node *current = head;
Node *delNode = delete;
if (current->songName == delNode->songName){
current= NULL;
remove = true;
}
while (!remove) {
if (current->link->songName == delNode->songName) {
current->link = delNode->link;
remove = true;
// free(delNode);
} else {
current = current->link;
}
}
}
【问题讨论】:
-
我不认为
if (current->link->songName == delNode->songName)会做预期的事情。 -
这取决于你如何定义你的列表以及你是否为
head使用了一个虚拟节点。请参阅:How to create a Minimal, Complete, and Verifiable example。
标签: c pointers linked-list nodes