Python实现双向链表
1、打开Python开发工具IDLE,新建‘DoubleLinkedList.py’文件,并写代码如下;class Node: def __i荏鱿胫协nit__(self,item): self.item = item self.next = None self.pre = Noneclass DoubleLinkedList: def __init__(self): self.__head = None def add(self,item): node = Node(item) if self.isEmpty(): self.__head = node else: node.next = self.__head self.__head.pre = node self.__head = node def isEmpty(self): return self.__head == None def walk(self): cur = self.__head while cur is not None: print (cur.item) cur = cur.next def length(self): cur = self.__head count = 0 while cur is not None: count += 1 cur = cur.next return countif __name__ == '__main__': sll = DoubleLinkedList() sll.add(8) sll.add(9) sll.walk()walk、length、isEmpty三个函数和单向链表一样的,不需要改动,add函数要注意pre的赋值。
2、F5运行程序,打印出添加进双向链表的内容:98
3、继续编写代码,增加双向链表的append方法,代码如下: def append(self,item): if self.length()==0: self.add(item) else: node = Node(item) cur = self.__head while cur.next is not None: cur = cur.next cur.next = node node.pre = curmain函数为:if __name__ == '__main__': sll = DoubleLinkedList() sll.add(8) sll.add(9) sll.append(0) sll.walk()
4、F5运行程序,0被成功添加到双向列表980
5、继续编写insert方法: def insert(self,i,item): 坡纠课柩if i<=0: self.add(item) elif i>=self.length(): self.append(item) else: node = Node(item) cur = self.__head index = 0 while index < i-1: index = index +1 cur = cur.next node.next = cur.next #让插入node的next指向当前node的next node.pre = cur #让插入node的pre指向当前node cur.next = node #让当前node的next指向插入的node cur.next.pre=node # 让当前node的next节点的pre指向nodemain方法:if __name__ == '__main__': sll = DoubleLinkedList() sll.add(8) sll.add(9) sll.insert(1,1) sll.append(0) sll.walk()
6、F5运行程序,在位置1成功插入1:9180
7、继续编写delete函数,代码如下: def delete(self,item)砜实蛰斓: cur = self.__hea颊俄岿髭d while cur is not None: if cur.item == item: if cur.pre is not None: #排除删除的时第一个node cur.pre.next = cur.next else: self.__head = cur.next if cur.next is not None: #排除删除的是最后一个node cur.next.pre = cur.pre cur = cur.nextmain方法if __name__ == '__main__': sll = DoubleLinkedList() sll.add(8) sll.add(9) sll.insert(1,1) sll.append(0) sll.delete(0) sll.walk()
8、F5运行程序,最后一个位置0元素被成功删除了918