使用循环指针和尾部指针构建双链表的优点/缺点是什么?哪一个更适合建造一个deque?
在我看来,它们在执行所有的搜索、插入和删除节点时基本相同。唯一不同的是,对于尾部指针双链接列表,您需要有一个指向最后一个节点的尾部指针,并且每次在尾部后面插入新节点时都需要更新它。此外,在循环链表中,第一个节点链接到最后一个节点,反之亦然,而在尾部指针中,head->prev和tail->point-to-null指针。我认为他们两个都是伟大的建立一个deque。这一切都取决于你希望你的程序如何运行。如果您希望您的程序能够在头节点和尾节点之间快速来回运行,请使用循环方法,否则,尾指针就足够了。
这就是我对这个问题的回答。由于我还没有建立任何循环双链表,我对它如何在机器上运行没有任何经验,但我怀疑它会像尾指针一样快。有什么建议吗?感谢大家的投入。
循环双链表可能是首选,因为您可以有效地从开始或结束添加/删除,并且它使用简单的统一数据结构。
实现循环dbl链表的最简单方法是保存一个与所有其他节点类型相同的"head"节点,但始终具有一个"null"项/值,并且仅用于保存指向实际"项节点"的next/prev指针。
当列表为空时,head.next&head.prev都指向自己。
循环dbl链表的逻辑更简单,而尾部指针变体允许"head"one_answers"tail"在为空时为null;这要求在任何修改操作中都可能更新"head"one_answers"tail"指针,从而使逻辑更加复杂。
这里的命名有点不清楚:我用head
来指代"列表节点",但它可以被称为"列表"或"节点"。
head.next -> first -> second -> ...
head.last -> last -> second-last -> ...
如果列表为空:
head.next -> head
head.last -> head
如果列表中有一项:
head.next -> item -> head
head.last -> item -> head