gpt4 book ai didi

c - 从单链表和双向链表中删除随机节点

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:35 25 4
gpt4 key购买 nike

我很难想出从双向链表和单向链表中删除某个节点的逻辑。我从帮助中在线查看,但找不到一个简单的例子。这是我所拥有的:


双向链接删除。 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;
}

问题是,在我从两个列表中删除一组随机节点后,双向链表从头到尾正确显示,但从尾到头显示不正确。单向链表也无法正确显示。

最佳答案

我觉得你的双向链表逻辑没问题。我唯一担心的是,如果 dCurrent 是列表中的唯一元素,那么:

if (dCurrent == dHead){
dHead = dCurrent->next;
dHead->prev = NULL;
}

很可能会尝试引用空指针。 (这取决于您如何设计列表。但在典型的设计中,如果 dCurrent 是唯一的节点,则 dCurrent->nextNULL.)

你的单链表逻辑在我看来也很好,在抽象的情况下,假设“sPrev = sCurrent->prev”;但我不明白这个假设怎么可能是正确的。如果它是单向链表,则 sCurrent 没有 prev 指针。

关于c - 从单链表和双向链表中删除随机节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8332794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com