非对称链表需要什么
What is the need for asymmetric linked list
我正在研究数据结构。我遇到了 Asymmetric linked list
,它指出它是一种特殊类型的双链表,其中
1. next link points to next node address
2. prev link points to current node address itself
但我想知道,
1. what are the advantages we get by designing such linked list?
2. what kind of applications this would be suitable for?
任何人都可以解释一下 Asymmetric linked list
。我用谷歌搜索但找不到相关答案。谢谢你。
来源:http://en.wikipedia.org/wiki/Doubly_linked_list#Asymmetric_doubly-linked_list
给定双链表的节点指针,我们可以通过'prev'和'next'遍历所有节点,而如果提供的指针没有,则单链表不能这样做;t指向第一个节点。
例如,从链表中删除一个节点。单链表需要从头开始遍历链表找到具体节点,还需要针对具体节点记录prev节点,时间复杂度为O(n)。但是,使用双链表,您可以使用常数时间执行特定节点的删除。
总之,给定一个特定的节点,对于单链表,如果我们需要使用它的前一个节点信息,从头部开始遍历O(n)是不可避免的,而双链表则不需要。
顺便说一句,STL中的list和Java中的LinkedList都是用双链表实现的。
我同意 Wiki 页面具有误导性。这是LL和ALL的区别:
打开链表:
node.next = nextNode
node.prev = prevNode
非对称链表:
node.next = nextNode
node.prev = prevNode.next
注意 prevNode 与 prevNode.next 的区别。
虽然指向节点内的指针仍然保留了向后遍历列表的能力(您可以通过从prevNode.next中减去得到prevNode地址)它可以简化列表上的插入和删除操作,尤其是在开始时元素.
我正在研究数据结构。我遇到了 Asymmetric linked list
,它指出它是一种特殊类型的双链表,其中
1. next link points to next node address
2. prev link points to current node address itself
但我想知道,
1. what are the advantages we get by designing such linked list?
2. what kind of applications this would be suitable for?
任何人都可以解释一下 Asymmetric linked list
。我用谷歌搜索但找不到相关答案。谢谢你。
来源:http://en.wikipedia.org/wiki/Doubly_linked_list#Asymmetric_doubly-linked_list
给定双链表的节点指针,我们可以通过'prev'和'next'遍历所有节点,而如果提供的指针没有,则单链表不能这样做;t指向第一个节点。
例如,从链表中删除一个节点。单链表需要从头开始遍历链表找到具体节点,还需要针对具体节点记录prev节点,时间复杂度为O(n)。但是,使用双链表,您可以使用常数时间执行特定节点的删除。
总之,给定一个特定的节点,对于单链表,如果我们需要使用它的前一个节点信息,从头部开始遍历O(n)是不可避免的,而双链表则不需要。
顺便说一句,STL中的list和Java中的LinkedList都是用双链表实现的。
我同意 Wiki 页面具有误导性。这是LL和ALL的区别:
打开链表:
node.next = nextNode
node.prev = prevNode
非对称链表:
node.next = nextNode
node.prev = prevNode.next
注意 prevNode 与 prevNode.next 的区别。
虽然指向节点内的指针仍然保留了向后遍历列表的能力(您可以通过从prevNode.next中减去得到prevNode地址)它可以简化列表上的插入和删除操作,尤其是在开始时元素.