class
dwlinkedlist
:class
node
:"""
結點類 用於存放數值以及前後指標
"""def__init__
(self, value, last,
next
=none):
self.value = value
self.last = last
self.
next
=next
def__init__
(self)
:"""
建立乙個結點 第乙個結點用來存放長度,方便把第乙個當作普通結點處理
"""self.head = self.node(0,
none
) self.tail = self.head
self.head.value =
0def
(self, value)
:"""
插入乙個值到鍊錶末端
由於存在乙個用於儲存長度的結點 第乙個與其他結點可以統一處理
:param value: 需要存放的數值
:return:
"""self.tail.
next
= self.node(value, self.tail)
self.tail = self.tail.
next
self.head.value +=
1def
pop(self)
:"""
刪除最後乙個結點並返回其值
讓未指標指向倒數第二個 並讓倒數第二個的next指向none
:return: 最後乙個結點的值
"""if self.head.value >0:
retvalue = self.tail.value
self.tail = self.tail.last
self.tail.
next
=none
self.head.value -=
1return retvalue
definsert
(self, value, index)
:"""
插入乙個值到索引處
:param value: 插入的值
:param index: 索引
:return:
"""if index >= self.head.value or self.head.value ==0:
else
:# 通過類方法__index_value來索引要插入位置處的結點
next_node = self.__index_value(index)
# 使用乙個二元組拆包將插入結點賦給前後結點的next和last
next_node.last.
next
, next_node.last =
(self.node(value, next_node.last, next_node),)
*2self.head.value +=
1def
remove
(self, index)
:"""
移除索引處的值
:param index: 索引
:return:
"""rm_node = self.__index_value(index)
# 如果移除的值是最後乙個 則呼叫pop方法
if rm_node is self.tail:
self.pop(
)else
: rm_node.last.
next
= rm_node.
next
rm_node.
next
.last = rm_node.last
self.head.value -=
1def
__len__
(self)
:return self.head.value
def__iter__
(self)
:# 第乙個結點的值是長度
cur = self.head.
next
while cur:
yield cur.value
cur = cur.
next
def__index_value
(self, key)
:"""
返回對應索引處的結點
:param key: 索引
:return: 結點 class self.node例項
"""# 如果是負索引,將其轉換為正索引 反向越界則為0
if key <0:
key = self.head.value + key if self.head.value >
-key else
0# 索引越界
if key >= self.head.value:
raise indexerror
# 判斷索引位置選擇正反向查詢
if key < self.head.value /2:
cur = self.head.
next
for _ in
range
(key)
: cur = cur.
next
else
: cur = self.tail
item = self.head.value - key -
1for _ in
range
(item)
: cur = cur.last
return cur
def__setitem__
(self, key, value)
: self.__index_value(key)
.value = value
def__getitem__
(self, item)
:return self.__index_value(item)
.value
def__str__
(self)
:# [dwlinkedlist : 0 <-> 1 <-> 2 <-> 3 <-> 4 <-> 5 <-> 6 <-> 7 <-> 8 <-> 9]
return
'[dwlinkedlist : {}]'
.format
(' <-> '
.join(
map(
str, self)))
defiter_reverse
(self)
:"""
反向迭代
:return: 生成器
"""cur = self.tail
for _ in
range
(self.head.value)
:yield cur.value
cur = cur.last
實現雙向鍊錶(Python)
可以快速找到上 下節點,也可以快速去掉鍊錶中的某乙個節點。encoding utf 8 class node def init self,key,value self.key key self.value value self.prev none self.next none def str sel...
python實現雙向鍊錶
雙向鍊錶節點 def init self,item self.item item self.next none self.prev none class dlinklist object def init self self.head none defis empty self return sel...
雙向鍊錶實現
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...