實現雙向鍊錶(Python)

2021-09-26 03:38:52 字數 2925 閱讀 6102

可以快速找到上/下節點,也可以快速去掉鍊錶中的某乙個節點。

#! -*- 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...