雙向鏈表簡介
雙向鏈表是一種常見的數據結構,它由多個節點組成,每個節點包含兩個指針,分別指向前一個節點和后一個節點。雙向鏈表可以支持兩個方向的遍歷,插入和刪除操作也比較靈活。
雙向鏈表的實現
1. 定義節點類
首先需要定義一個節點類,包含節點值和前后指針
class Nodeit__(self, val)
self.val = valeexte
2. 初始化鏈表
可以定義一個雙向鏈表類,包含頭節點和尾節點
kedListit__(self)e)e)ext = self.tail
self.tail.prev = self.head
3. 插入節點
在雙向鏈表中,插入節點可以分為三種情況在頭部插入、在尾部插入、在中間插入。以在尾部插入為例,先創建一個新節點,然后將其插入到尾節點前面
sert_tail(self, val)ewode = Node(val)ewode.prev = self.tail.prevewodeext = self.tailextewodeewode
4. 刪除節點
e,然后將頭節點指向下一個節點
def delete_head(self)ext == self.taileodeextextodeextodeext.prev = self.headode.val
5. 遍歷鏈表
雙向鏈表可以支持正向和反向遍歷,以正向遍歷為例
def traverse(self)odeextode != self.tailtode.val)odeodeext
6. 完整代碼
class Nodeit__(self, val)
self.val = valeexte
kedListit__(self)e)e)ext = self.tail
self.tail.prev = self.head
sert_tail(self, val)ewode = Node(val)ewode.prev = self.tail.prevewodeext = self.tailextewodeewode
def delete_head(self)ext == self.taileodeextextodeextodeext.prev = self.headode.val
def traverse(self)odeextode != self.tailtode.val)odeodeext
通過上述代碼,我們可以看到實現雙向鏈表并不是很難,但是需要注意指針的指向和節點的插入和刪除。雙向鏈表可以支持兩個方向的遍歷,而且插入和刪除操作也比較靈活,因此在實際應用中經常被使用。掌握雙向鏈表的實現,可以提升數據結構和算法的能力。