#头插法建表:由数组a整体建立单链表defCreateListF(self,a):for i inrange(len(a)):
s=ListNode(a[i])
s.next=self.head.next
self.head.next=s
#尾插法建表:由数组a整体建立单链表defCreateListC(self,a):
t=self.head
for i inrange(len(a)):
s=ListNode(a[i])
t.next=s
t=s
t.next=None
线性表的基本运算在单链表中的实现
#查找序号为i的结点defgeti(self,i):
p=self.head
j=-1while(j<i and p isnotNone):
j+=1
p=p.nextreturn p
#将e添加到单链表末尾:先新建一个元素e的结点s,找到尾结点p,在p之后插入sdefAdd(self,e):
s=ListNode(e)
p=self.head
while p.next!=None:
p=p.next
p.next=s
#求单链表长度defgetsize(self):
p=self.head
cnt=0while p.next!=None:
p=p.next
cnt+=1return cnt
#求单链表中序号i的元素值def__getitem__(self,i):assert i>=0
p=self.geti(i)assert p isnotNonereturn p.data
#设置单链表中序号i的元素值def__setitem__(self,i,e):assert i>=0
p=self.geti(i)assert p isnotNone
p.data=e
#求单链表中第一个值为e的元素的序号defGetNo(self,e)
p=self.head.next
j=0while p isnotNoneand p.data!=e:
j+=1
p=p.nextif p isNone:return-1else:return j
#在单链表中插入e,作为第i个元素defInsert(self,i,e):assert i >=0
s=ListNode(e)
p=self.geti(i-1)assert p isnotNone
s.next=p.next
p.next=s
#在单链表中删除第i个数据元素defDelete(self,i):assert i>=0
p=self.geti(i-1)while p!=Noneand p.nextisnotNone:
p.next=p.next.next#输出单链表中的所有元素defdisplay(self):
p=self.head.nextwhile p isnotNone:print(p.data,end='')
p=p.nextprint()
#头插法defCreateListF(self,a):for i inrange(len(a)):
s=DLinkNode(a[i])
s.next=self.dhead.nextif self.head.next!=None:
self.dhead.next.prior=s
self.dhead.next=s
s.prior=self.dhead
#尾插法defCreateListR(self,a):
t=self.head
for i inrange(len(a)):
s=DLinkNode(a[i])
t.next=s
s.prior=t
t=s
t.next=None
基本运算在双链表中的实现
#在双链表中序号i的位置插入元素edefInsert(self,i,e):assert i >=0
s=DLinkNode(e)
p=DlinkList[i-1]assert p isnotNone
s.next=p.nextwhile p.next!=None:
p.next.prior=s
s.prior=p
p.next=s
#在双链表dhead中删除序号i的结点defgeti(self,i):
j=-1
p=self.head
while j<i and p isnotNone:
j+=1
p=p.nextreturn p
defDelete(self,i):assert i>=0
p=self.geti(i)assert p isnotNone
p.prior.next=p.nextif p.next!=None:
p.next.prior=p.prior