【发布时间】:2012-01-10 02:14:17
【问题描述】:
我很难想出从双链表和单链表中删除某个节点的逻辑。我从帮助中在线查看,但我找不到一个简单的例子。这是我所拥有的:
双重链接删除。 dCurrent 是我们要删除的节点。
if (dCurrent == dHead){
dHead = dCurrent->next;
dHead->prev = NULL;
}
else if(dCurrent == dTail){
dTail = dCurrent->prev;
dTail->next = NULL;
}
else{
dCurrent->next->prev = dCurrent->prev;
dCurrent->prev->next = dCurrent->next;
}
这就是我所拥有的单链表。同样,sCurrent 是要删除的节点。和sPrev = sCurrent->prev。
if(sPrev == NULL){
sHead = sCurrent->next;
}
else{
sPrev->next = sCurrent->next;
}
问题是,在我从两个列表中删除一组随机节点后,双向链表从头到尾正确显示,但不是从尾到头显示。单链表也不能正确显示。
【问题讨论】:
-
那么你的问题是什么。乍一看,代码没问题。
-
代码看起来没问题。你的问题是?
-
对不起,我忘了说明我的问题。现已修复
-
@MichaelSchilling:您显示的代码似乎不包含该错误。我认为您需要发布一个尽可能简短的完整程序,同时仍然显示您的问题。 (此外,您可能希望将此问题限制为一个问题或其他问题。双链表程序的问题可能与单链表程序的问题完全无关,在这种情况下它们应该是单独的问题,或者它们可能完全一样,在这种情况下,无论如何你只需要问一个。)
标签: c linked-list singly-linked-list doubly-linked-list