雙向鍊錶的特點是:第乙個元素的 prev 是none
1部分列印結果:#雙向鍊錶:
2class
node:
3def
__init__(self, node=none, prev=none, next=none):4#
注意順序,因為例項化,一般不會關鍵字傳參, 如果node= none(1) 1 是給node形參的,如果形參列表不同,則會出現異常
5 self.prev =prev
6 self.node =node
7 self.next =next89
def__repr__
(self):
10return
'{} {}
'.format(
11 self.prev.node if self.prev else
none,
12self.node,
13 none if self.next is none else
self.next.node)
1415
class
doublelinklist:
16def
__init__(self, head= none, tail=none):
17 self.head =head
18 self.tail =tail
19 self.lens =0
2021
def22 node =node(node)
23if self.head is
none:
24 self.head =node
25else
:26 self.tail.next =node
27 node.prev =self.tail
28 self.tail =node
29 self.lens += 1
3031
def iternode(self, reverse=true):
32if self.head is
none:
33raise exception('
this is a emppty linklist')
34 current = self.head if reverse else
self.tail
35while
current:
36yield
current
37 current = current.next if reverse else
current.prev
3839
def__iter__
(self):
40if self.head is
none:
41raise exception('
this is a emppty linklist')
42 current =self.head
43while
current:
44yield
current
45 current =current.next
4647
def__getitem__
(self, index):
48 reverse = true if index>=0 else
false
49 start = 0 if index>=0 else 1
50for i, v in
enumerate(ll.iternode(reverse), start):
51if i ==abs(index):
52returnv53
54def
__setitem__
(self, index, value):
55 ll[index].node =value
5657
def__len__
(self):
58return
self.len
5960
defremove(self):
61pass62#
先判斷是否為空63#
需要遍歷,利用iter64#
注意是中間,第乙個,還是尾部刪除
6566
defpop(self):
67pass68#
值刪除尾部,self.tail.next = none
6970
definsert(self, index):
71pass72#
類似於remove
7374
7576 ll =doublelinklist()
8283
for i in
ll.iternode(false):
84print
(i)85
print('
----
'* 20)
86print(ll[-1])
8788 ll[-1] = 10000
89print(ll[-1])
C 實現簡單的雙向鍊錶
vs2013下編譯執行,實現了雙向鍊錶類list 的 建構函式,拷貝構造 析構函式 賦值運算子過載 清空 頭插 頭刪 尾插 尾刪 插入 刪除 逆序和刪除鍊錶中重複的資料值函式等。直接貼 dulist.h 類宣告 定義 成員函式定義。pragma once 雙向鍊錶 include includeus...
雙向鍊錶實現
template class link link link pre null,link ne null void operator new size t void operator delete void ptr template link link freelist null template v...
雙向鍊錶實現
雙向鍊錶的應用背景主要是單向鍊錶只能順序訪問,逆序訪問單向鍊錶 尤其是較大的單向鍊錶是一件極其費時費力的工作 相比於單向鍊錶,雙向鍊錶增加了乙個域,這個域裡面增加了乙個指向前驅節點的指標,使得整個鍊錶可以順序訪問或者逆序訪問,來去自如 定義的雙向鍊錶的標頭檔案,裡面包含了雙向鍊錶的宣告和資料型別的定...