【數據結構專項】鏈表(7) —— 管理雙向鏈表的基本類(使用雙側哨兵結點)

class DoublyLinkedBase:
    """管理雙向鏈表的基本類(使用雙側哨兵結點)"""

    class _Node:
        __slots__ = "value", "prev", "next"  # 因爲會創建很多個結點對象,因此使用__slots__來減少內存佔用

        def __init__(self, value, prev=None, next=None):
            self.value = value
            self.prev = prev
            self.next = next

        def __str__(self):
            return str(self.value) + "<->" + str(self.next)

    def __init__(self):
        self._header = self._Node(None)  # 頭部哨兵結點
        self._trailer = self._Node(None)  # 尾部哨兵結點
        self._header.next = self._trailer
        self._trailer.prev = self._header
        self._size = 0

    def __len__(self):
        """返回鏈表中元素的數量"""
        return self._size

    def is_empty(self):
        """返回鏈表是否爲空"""
        return self._size == 0

    def insert_between(self, value, prev, next):
        """向鏈表中添加新結點"""
        node = self._Node(value, prev, next)
        prev.next = node
        next.prev = node
        self._size += 1
        return node

    def delete_node(self, node):
        """從鏈表中刪除結點"""
        prev = node.prev
        next = node.next
        prev.next = next
        next.prev = prev
        self._size -= 1
        value = node.value
        node.prev = node.next = node.val = None
        return value
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章