可以快速找到上/下節點,也可以快速去掉鍊錶中的某乙個節點。
#! -*- encoding=utf-8 -*-
class node:
def __init__(self, key, value):
self.key = key
self.value = value
self.prev = none
self.next = none
def __str__(self):
val = '' % (self.key, self.value)
return val
def __repr__(self):
val = '' % (self.key, self.value)
return val
class doublelinkedlist:
def __init__(self, capacity=0xffff):
self.capacity = capacity
self.head = none
self.tail = none
self.size = 0
# 從頭部新增
def __add_head(self, node):
if not self.head:
self.head = node
self.tail = node
self.head.next = none
self.head.prev = none
else:
node.next = self.head
self.head.prev = node
self.head = node
self.head.prev = none
self.size += 1
return node
# 從尾部新增
def __add_tail(self, node):
if not self.tail:
self.tail = node
self.head = node
self.tail.next = none
self.tail.prev = none
else:
self.tail.next = node
node.prev = self.tail
self.tail = node
self.tail.next = none
self.size += 1
return node
# 從尾部刪除
def __del_tail(self):
if not self.tail:
return
node = self.tail
if node.prev:
self.tail = node.prev
self.tail.next = none
else:
self.tail = self.head = none
self.size -= 1
return node
# 從頭部刪除
def __del_head(self):
if not self.head:
return
node = self.head
if self.head.next:
self.head.next.prev = none
self.head = self.head.next
else:
self.head = self.tail = none
self.size -= 1
return node
# 任意節點刪除
def __remove(self, node):
# 如果node=none, 預設刪除尾部節點
if not node:
node = self.tail
if node == self.tail:
self.__del_tail()
elif node == self.head:
self.__del_head()
else:
node.prev.next = node.next
node.next.prev = node.prev
self.size -= 1
return node
def pop(self):
return self.__del_head()
return self.__add_tail(node)
return self.__add_head(node)
def remove(self, node=none):
return self.__remove(node)
def print(self):
p = self.head
line = ''
while p:
line += '%s' % (p)
p = p.next
if p:
line += '->'
print(line)
if __name__ == '__main__':
l = doublelinkedlist(10)
nodes =
for i in range(10):
node = node(i, i)
l.print()
l.print()
l.pop()
l.print()
l.print()
l.print()
l.print()
l.remove(nodes[2])
l.print()
l.remove()
l.print()
Python實現雙向鍊錶
class dwlinkedlist class node 結點類 用於存放數值以及前後指標 def init self,value,last,next none self.value value self.last last self.next next def init self 建立乙個結點 ...
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...