Python实现双向链表
1、打开Python开发工具IDLE,新建‘DoubleLinkedList.py’文件,并写代码如下;
class Node:
def __init__(self,item):
self.item = item
self.next = None
self.pre = None
class 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 count
if __name__ == '__main__':
sll = DoubleLinkedList()
sll.add(8)
sll.add(9)
sll.walk()
walk、length、isEmpty三个函数和单向链表一样的,不需要改动,add函数要注意pre的赋值。
2、F5运行程序,打印出添加进双向链表的内容:
9
8
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 = cur
main函数为:
if __name__ == '__main__':
sll = DoubleLinkedList()
sll.add(8)
sll.add(9)
sll.append(0)
sll.walk()
4、F5运行程序,0被成功添加到双向列表
9
8
0
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指向node
main方法:
if __name__ == '__main__':
sll = DoubleLinkedList()
sll.add(8)
sll.add(9)
sll.insert(1,1)
sll.append(0)
sll.walk()
6、F5运行程序,在位置1成功插入1:
9
1
8
0
7、继续编写delete函数,代码如下:
def delete(self,item):
cur = self.__head
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.next
main方法
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元素被成功删除了
9
1
8