class Node: def __init__(self, i): self.prev = None self.next = None self.id = i class DoubleDirectionList: def __init__(self): self.head = None self.length = 0 def disPlayFromLeft(self): current = self.head count = 1 while current: print('我是第{}个结点 id= {}'.format(count, current.id)) count += 1 current = current.next def disPlayFromRight(self): current = self.head.tail count = self.length while current: print('我是第{}个结点 id= {}'.format(count, current.id)) count -= 1 current = current.prev def insert_first(self, node): if not self.head: self.head = node self.head.tail = None elif self.head.next == None: node.prev = self.head self.head.next = node self.head.tail = node else: tmp = self.head.next self.head.next = node node.prev = self.head node.next = tmp tmp.prev = node self.length += 1 def insert_after(self, node): if not self.head: self.head = node self.head.tail = None elif self.head.next == None: node.prev = self.head self.head.next = node self.head.tail = node else: tmp = self.head.tail self.head.tail = node node.prev = tmp tmp.next = node self.length += 1 def delete(self, node): if self.head.id == node.id: tmp = self.head.next tmp.tail = self.head.tail self.head.tail = None self.head.next = None self.head = tmp self.head.prev = None elif self.head.tail.id == node.id: tmp = self.head.tail.prev tmp.next = None self.head.tail.prev = None self.head.tail = tmp else: current = self.head while current: if current.id == node.id: tmp = current.prev tmp2 = current.next tmp.next = tmp2 tmp2.prev = tmp current.prev = None current.next = None current = current.next self.length -= 1 def getLenght(self): return self.length def find(self, node): current = self.head while current: if current.id == node.id: return current current = current.next return -1 if __name__ == '__main__': ddlist = DoubleDirectionList() ddlist.insert_first(Node(1)) ddlist.insert_first(Node(3)) ddlist.insert_first(Node(2)) ddlist.insert_after(Node(4)) ddlist.insert_after(Node(5)) ddlist.delete(Node(5)) ddlist.delete(Node(4)) ddlist.delete(Node(3)) ddlist.disPlayFromLeft() ddlist.disPlayFromRight()
python实现双向链表(原创请勿转载)
最新推荐文章于 2024-04-12 12:15:46 发布