go - 如何在不使用尾部指针的情况下实现双向链表

标签 go data-structures linked-list doubly-linked-list

在双向链表中是否必须有一个尾部指针?如何在没有尾指针的情况下实现双链列表插入,如果这样做的话,时间的复杂度是多少。

最佳答案

不,没有必要。以下是不使用tail指针的双向链接列表的时间复杂度。

附加到列表: O(1)

(头<-> newNode <-> x)

在列表的两个节点之间插入:O(n)

(头<-> x <-> newNode <-> y)

追加到列表:O(n)

(头<-> x <-> y <-> newNode)

注意:利用双向链表的tail会使复杂度为O(1)


TL; DR :不,除了附加性能较低的O(n)外,它的功能几乎相同。

关于go - 如何在不使用尾部指针的情况下实现双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58824716/

相关文章:

java - 在什么意义上可以说 LinkedList 不支持随机访问?

go 中的 http 响应迭代

file - 确定路径是否在 Go 中的另一个路径内

go - 如何等待 panic 的协程?

unit-testing - Go 中用于单元表测试的错误类型检查

C 结构错误 : Dereferencing pointer to an incomplete type

c - 链表创建运行时错误

java - 将 inOrderTraversal 方法的内容放入文件时遇到问题

c++ - 我已经使用指针在 C++ 中声明了二维数组。如何将值初始化为数组

algorithm - 从节点集创建组