- 定义一个双向链表
class DoubleLinklist(object):
def __init__(self,node):
self._head=node
和单向链表一样,第一个节点的 pre 部分不需要定义
- 双向链表相关函数
2.1 头插法 add(item)
def add(self,item):
node=Node(item)
cur=self._head
node.next=cur
self._head=node
cur.pre=node
2.2 尾插法 append(item)
def append(self,item):
node=Node(item)
cur=self._head
if cur==None:
self._head=node
else:
while(cur.next!=None):
cur=cur.next
cur.next=node
node.pre=cur
2.3 在第 pos 个元素之后插入 insert(pos,item)
def insert(self,pos,item):
node=Node(item)
cur=self._head
if pos==0 or cur==None: #空链表或在第一个位置插入
self.add(item)
return
else:
count=1
while(cur.next!=None):
if count!=pos:
cur=cur.next
count=count+1
else:
node.next=cur.next
cur.next.pre=node
node.pre=cur
cur.next=node
return
if pos==count: #在最后插入
self.append(item)
2.4 删除内容为 item 的元素 remove_item(item)
def remove_item(self,item):
cur=self._head
if cur.item==item:
self._head=cur.next
return
else:
while(cur.next!=None):
if cur.item!=item:
cur=cur.next
else:
cur.pre.next=cur.next
cur.next.pre=cur.pre
return
if cur.item==item:
cur.pre.next=None
2.5 删除第 pos 个元素 remove_pos(pos)
def remove_pos(self,pos):
cur=self._head
if cur==None:
return
else:
count=1
while(cur.next!=None):
if count!=pos:
cur=cur.next
count=count+1
else:
if pos==1:
self._head=cur.next
else:
cur.pre.next=cur.next
cur.next.pre=cur.pre
return
if count==pos:
if count==1: #将只有一个元素的链表删除
self._head=None
else: # 删除最后一个元素
cur.pre.next=None
三种链表的总结就全部结束了,很多地方的思路前后都不太一样,是用的当时写程序时最顺手的方法写的,以后常来看看复习,可以改进的地方还有很多。