一、链表的实现
class LinkNode:
def __init__(self,data=None):
self.data=data
self.next=None
class LinkList:
def __init__(self):
self.head=LinkNode()
self.head.next=None
#将a中的元素插入到链表里面
#头插法
def CreateListF(self,a):
for i in range(0,len(a)):
s=LinkNode(a[i])
s.next=self.head.next
self.head.next=s
#尾插法
def CreateListR(self,a):
t=self.head
while t.next:
t=t.next
for i in range(0,len(a)):
s=LinkNode(a[i])
t.next=s
t=t.next
t.next=None
#打印全部的链表数据
def display(self):
p=self.head.next
while p:
print(p.data,end='->')
p=p.next
print()
#返回第i个结点
def geti(self,i):
p=self.head
j=-1
while(j<i and p is not None):
p=p.next
j+=1
return p
#将元素e添加到线性表的末尾
def Add(self,e):
s=LinkNode(e)
p=self.head
while p.next is not None:
p=p.next
p.next=s;
#获得链表的大小
def getsize(self):
p=self.head
cnt=0
while p.next is not None:
cnt+=1
p=p.next
return cnt
#任意存取
def __getitem__(self, i):
assert i>=0
p=self.geti(i)
assert p is not None
return p.data
#设置任意位置的数据
def __setitem__(self, key, value):
assert key >= 0
p = self.geti(key)
assert p is not None
p.data=value
#返回第一次遇到e的索引
def GetNo(self,e):
j=0
p=self.head.next
while p is not None and p.data!=e:
j=j+1
p=p.next
if p is None:
return -1
else:
return j
#在第i个位置插入指定的元素e
def Insert(self,i,e):
assert i>=0
s=LinkNode(e)
p=self.geti(i-1)
assert p is not None
s.next=p.next
p.next=s
#删除第i个位置
def Delete(self,i):
assert i>=0
p=self.geti(i-1)
assert p!=None and p.next!=None
p.next=p.next.next
二、测试代码
if __name__=='__main__':
L=LinkList()
for i in range(1,6):
L.Add(i)
print("L:",end=''),L.display()
print("序号为2的元素=%d"%(L[2]))
print("设置序号为2的元素为8")
L[2]=8
print("序号为2的元素=%d"%(L[2]))
n=L.getsize()
print("size=%d"%(n))
for i in range(0,n):
print("删除%d序号的元素"%(0))
L.Delete(0)
print("L:",end=''),L.display()
print("size=%d"%(L.getsize()))