python之双向链表的各种操作
12.25自己动手操作,孰能生巧
is_empty() 链表是否为空
length() 链表长度
travel() 遍历链表
add(item) 链表头部添加
append(item) 链表尾部添加
insert(pos, item) 指定位置添加
remove(item) 删除节点
代码实现
class Node(object):
"""定义结点"""
def __init__(self,item):
self.item=item
self.next=None
self.prev=None
class DoubleLinkList(object):
"""定义双链表"""
def __init__(self):
self.head=None
def is_empty(self):
return self.head==None
def length(self):
cur=self.head
count=0
while cur!=None:
count+=1
cur=cur.next
return count
def travel(self):
cur=self.head
while cur!=None:
print(cur.item,end=" ")
cur=cur.next
print("之后就没有元素")
def append(self,item):
node=Node(item)
if self.is_empty():
self.head=node
else:
cur=self.head
while cur.next!=None:
cur=cur.next
cur.next=node
node.prev=cur
def add(self,item):
node=Node(item)
if self.is_empty():
self.head=node
else:
node.next=self.head
#self.head.prev=node #两种不同思路
#self.head=node
self.head=node
self.head.next.prev=node
def insert(self,pos,item):
if pos>(self.length()-1):
self.append(item)
if pos<=0:
self.add(item)
else:
node=Node(item)
count=0
cur=self.head
while count<(pos-1):
cur=cur.next
count+=1
node.prev=cur
node.next=cur.next
cur.next.prev=node
cur.next=node
def remove(self,item):
cur=self.head
while cur!=None:
if cur.item==item:
#结点是否是头结点
if cur==self.head:
self.head=cur.next
if cur.next:
#链表是否只有一个结点
cur.next.prev=None
else:
cur.prev.next=cur.next
if cur.next:
#结点是否在尾部
cur.next.prev=cur.prev
break
else:
cur=cur.next
def search(self,item):
cur=self.head
while cur!=None:
if cur.item==item:
return True
else:
cur=cur.next
return False
if __name__=="__main__":
ls=DoubleLinkList()
print(ls.is_empty())
print(ls.length())
ls.travel()
ls.add(520)
ls.add(74)
ls.append(15)
ls.append(84)
ls.insert(2,14)
ls.remove(14)
print(ls.length())
ls.travel()
日常感慨:人生没有捷径,别总想着跳大步!!! 加油,铁铁