C 我知道在双链表中不需要变量来存储prev节点

C 我知道在双链表中不需要变量来存储prev节点,c,data-structures,linked-list,singly-linked-list,doubly-linked-list,C,Data Structures,Linked List,Singly Linked List,Doubly Linked List,因此,我在搜索节点时使用cur->llink来表示上一个节点,并删除该节点。 假设在中间擦除一个节点。< /P> cur=h->first; cur->llink=NULL; while(cur->rlink!=NULL) { if(I find the node that delete(cur)) { cur->llink->rllink=cur->rllink; cur->rlink->llink

因此,我在搜索节点时使用cur->llink来表示上一个节点,并删除该节点。 假设在中间擦除一个节点。< /P>
cur=h->first;
cur->llink=NULL;
while(cur->rlink!=NULL)
{
    if(I find the node that delete(cur))
    {
        cur->llink->rllink=cur->rllink;
        cur->rlink->llink=cur->llink;
        free(cur);
    }

    cur->llink=cur;
    cur=cur->rlink;
}
但是当我打印列表时。I free节点仍在垃圾值列表中。 [0]=10[1]=34321321[2]=30

我想要这个:[0]=10,[1]=30。 所以我使用prev节点。创建prev节点,只需将cur->llink替换为类似prev的单链表即可。 然后它就起作用了。
我不知道它为什么起作用

什么是
cur->llink=cur用于?(它正在清除您以前的节点链接)
cur
cur=cur->rlink之后
应该有一个有效的
cur->llink
指向
cur
之前的
cur=cur->rlink。你可能会发现最近的答案很有帮助。(您可以忽略标题中的“反转”部分,这是一个通用的双链接列表讨论)@DavidC.Rankin那么,我是否需要将cur->llink放在prev变量中?当您向列表中添加节点时,您可以确定
llink
rlink
指向列表中的上一个和下一个节点(第一个节点上有
head->llink=NULL;
,最后一个节点上有
tail->rlink=NULL
)。当您迭代查找要删除的节点时,您不会调整任何指针,除非实际执行删除操作。代码
cur=cur->rlink;
将当前节点设置为下一个节点。这就是您需要在列表上迭代的全部内容。
cur->llink=cur;
根本不属于该函数。(请参阅此编辑的注释)下面是一个简单的双链表(整数)示例,它向您展示了列表操作以及如何查找和删除列表中的节点(作为验证测试,代码随机删除列表中的所有节点)请参阅请提供初始化列表的代码,然后调用此函数,然后打印列表,以便我们可以运行并查看您所说的内容。