雙向鍊錶:每乙個元素都是乙個物件,每個物件有乙個關鍵字key和兩個指標:next和prev在雙向鍊錶的實現中,使用乙個偽頭部(dummy head)和偽尾部(dummy tail)標記界限,這樣在新增節點和刪除節點的時候就不需要檢查相鄰的節點是否存在。
class dlinkednode:
def __init__(self, key=0, value=0):
self.key = key
self.value = value #內容區域,可自定義多個字段
self.prev = none
self.next = none # 指標區域 , 雙向鍊錶有兩個指標
class
dlinkednodelist
:def
__init__
(self)
:# 使用偽頭部和偽尾部節點(更方便不用迴圈遍歷出沒有next是尾部)
self.head = dlinkednode(
) self.tail = dlinkednode(
)# 首尾相鏈
self.head.
next
= self.tail
self.tail.prev = self.head
# 新增乙個新元素在鍊錶尾部
defadd_to_tail
(node)
:# 新增的節點 前後指標賦值
node.prev = self.tail.prev
node.
next
= self.tail
# 因為是雙線鍊錶 新增位置的前乙個節點的next 和後一節點的prev 也要鏈結上
self.tail.prev.
next
= node
self.tail.prev = node
# 新增乙個新元素在鍊錶頭部
defadd_to_head
(node)
: node.prev = self.head
node.
next
= self.head.
next
self.head.
next
.prev = node
self.head.
next
= node
defremove
(node)
: node.
next
.prev =node.prev
node.prev.
next
= node.
next
3 雙向鍊錶(Java)
雙向鍊錶中每個節點保留兩個引用prev和next,讓prev指向當前節點的上乙個節點,讓next指向當前節點的下乙個節點,此時的鍊錶既可以向後一次訪問每個節點,也可以依次訪問每個節點,也可以向前一次訪問每個節點。操作 查詢 即可從頭結點開始搜尋,也可以從尾節點開始搜尋,取決於被搜尋的節點是更靠近he...
演算法2 鍊錶3 雙向鍊錶
雙 向 鍊錶中有兩條方向不同的鏈,即每個結點中除next域存放後繼結點位址外,還增加乙個指向其直接前趨的指標域prior。雙向鍊錶在查詢時更方便 特別是大量資料的遍歷。注意 雙鏈表由頭指標head惟一確定的。帶頭結點的雙鏈表的某些運算變得方便。將頭結點和尾結點鏈結起來,為雙 向 迴圈鍊錶。形式描述 ...
1 5 雙向鍊錶
實現 public class doublelinkedlistdemo 鍊錶操作類 class doublelinkedlist 新增節點 同單向,但有點區別,加上前乙個指標 public void add heronode2 heronode2 temp.next heronode2 heron...