Python3 雙向鏈表

雙向鏈表

雙向鏈表:每一個元素都是一個對象,每個對象有一個關鍵字key和兩個指針:next和prev
在雙向鏈表的實現中,使用一個僞頭部(dummy head)和僞尾部(dummy tail)標記界限,這樣在添加節點和刪除節點的時候就不需要檢查相鄰的節點是否存在。

  • 雙向鏈表:每一個元素都是一個對象(DLinkedNode類的實例),每個對象有一個關鍵字key和兩個指針:next和prev
class DLinkedNode:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value #內容區域,可自定義多個字段
        self.prev = None
        self.next = None # 指針區域 , 雙向鏈表有兩個指針
  • 雙向鏈表LIST
class DLinkedNodeList:
    def __init__(self):
        # 使用僞頭部和僞尾部節點(更方便不用循環遍歷出沒有next是尾部)
        self.head = DLinkedNode()
        self.tail = DLinkedNode()
        # 首尾相鏈
        self.head.next = self.tail
        self.tail.prev = self.head
    # 添加一個新元素在鏈表尾部
    def add_to_tail(node):
    	# 新增的節點 前後指針賦值
        node.prev = self.tail.prev
        node.next = self.tail
        # 因爲是雙線鏈表 新增位置的前一個節點的next 和後一節點的prev 也要鏈接上
        self.tail.prev.next = node
        self.tail.prev = node
    # 添加一個新元素在鏈表頭部
    def add_to_head(node):
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node
    def remove(node):
    	# 移除: 只需把前後節點的 next,prev 指針跳過移除的元素 鏈接
        node.next.prev =node.prev
        node.prev.next = node.next
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章