Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中分别编写销毁双链表和单链表的销毁算法有什么区别?_C_Linked List_Singly Linked List_Doubly Linked List - Fatal编程技术网

在C语言中分别编写销毁双链表和单链表的销毁算法有什么区别?

在C语言中分别编写销毁双链表和单链表的销毁算法有什么区别?,c,linked-list,singly-linked-list,doubly-linked-list,C,Linked List,Singly Linked List,Doubly Linked List,在我的考试中,有一个问题是这样的,我一直在想,在C语言中分别编写销毁双链表和单链表的销毁算法有什么区别?如果您的数据类型允许双链表是一个环,那么您需要将链接断回头部。然后像往常一样遍历列表,复制指针并随走随放。我会说我认为没有必要有任何不同。在单链表(从头到尾迭代)上工作的算法在双链表上也同样有效。我想你可以从任何一个节点开始销毁一个双链表,但这是一个糟糕的设计。双链表是圆形的吗(尾部指向头部)?如果是这样(通常是这样),您可能必须在循环上实现不同的条件。@Beta-通常,双链接列表的“头”将与

在我的考试中,有一个问题是这样的,我一直在想,在C语言中分别编写销毁双链表和单链表的销毁算法有什么区别?

如果您的数据类型允许双链表是一个环,那么您需要将链接断回头部。然后像往常一样遍历列表,复制指针并随走随放。

我会说我认为没有必要有任何不同。在单链表(从头到尾迭代)上工作的算法在双链表上也同样有效。我想你可以从任何一个节点开始销毁一个双链表,但这是一个糟糕的设计。双链表是圆形的吗(尾部指向头部)?如果是这样(通常是这样),您可能必须在循环上实现不同的条件。@Beta-通常,双链接列表的“头”将与不同的数据结构或内存模型相关联。。。此外,如果您要迭代直到点击
NULL
,那么现在您可能需要迭代直到(重新)点击
head
@Myst:同样的警告适用于循环单链接列表。@Beta-在单链接列表中,
head!=尾部
(尾部通常为空)。。。而在双链接列表中,
head==tail
,这可能会导致双
免费
,除非您进行测试。为什么必须断开head中的反向链接?如果你不这样做会发生什么?没什么吗?谢谢你的提问。我的回答措辞拙劣,我本该说的是断绝与头部的联系。记住,在一个环中,如果你不想办法停止绕圈,你最终会击中同一个节点两次。在这种情况下,您可以跟随损坏的指针,或者更糟的是--空闲()内存,该内存已经是free()d。最后一种情况基本上打开了通往地狱的大门,让所有守护进程退出。