【发布时间】:2018-02-19 05:26:20
【问题描述】:
我需要创建一个循环链表。但是,我不确定我是否应该拥有一个 head 节点。如果我包含一个head 节点,我将能够轻松清空所有内容。但是最后一个元素必须指向head 指向的节点?我不确定这是否会使事情变得容易或变得更难。
【问题讨论】:
-
由于它是循环的,因此您本身不需要“头”节点。但是您在任何给定时间都需要指向列表中某个节点的指针
-
从你有参考的节点开始释放下一个节点,直到你绕完一圈。非常类似于单链表,但不是头对尾,而是头对头
-
如果它是单链接的,如果我们的入口点不是头部,则无法获取对先前节点的引用。如果它是双重链接的,那么任何任意节点都可以,尽管这使得搜索变得困难,因为现在你必须双向搜索
-
要创建一个循环列表,您不需要头节点。所有元素都指向下一个节点,最后一个指向第一个节点,以找到一个元素,您可以遍历整个列表,直到到达您开始使用的那个。这意味着头部可以完全任意,列表中的每个元素都可以充当头部。需要注意的是,根据具体实现,您可能希望实现双向链表以缩短许多链表操作的执行时间
-
无论列表如何实现,每种类型都可以用于相同的目的。因此,如果插入总是在列表的尾部,则列表的前面可能很重要。即使列表是循环的,这也可能是正确的。
标签: c pointers linked-list