class Node:
def __init__(self,x):
self.data=x
self.next=None
def getadta(self):
return self.data
class solution:
def __init__(self):
self.head=None
#在链表尾添加数据
def append(self,item):
temp=Node(item)
if not self.head:
self.head=temp
else:
current=self.head
while current.next:
current=current.next
current.next=temp
def reverlist(self):
if not self.head and not self.head.next:
return []
pre=None#pre最后变成了新表头结点
current=self.head
while current:
temp=current.next
current.next=pre
#pre和current均后移一位
pre=current
current=temp
return pre
def travel(self):
current=self.head
while current:
print(current.data,end=' ')
current=current.next
print()
def add(self,item):#增添头结点
temp=Node(item)
temp.next=self.head#将新节点的next引用指向当前列表中第一个节点,这样列表就和新节点连接在一起
self.head=temp#然后修改列表头结点,使其指向新创建的节点
def remove(self,item):
current=self.head#最后指向需要被移除的节点
previous=None#最后指向需要被移除的节点的上一个节点,用于指向被移除节点的下一个节点
found=False
while not found:
if current.data==item:
found=True
else:
previous=current
current=current.next
if previous==None:#如果需要被移除的节点是头结点,则需要修改头结点,
self.head=current.next
else:
previous.next=current.next
def insert(self,item,index):
temp=Node(item)
if not self.head:
self.head=temp
else:
current=self.head
while current:
if current.data==index:
temp.next=current.next
current.next=temp
break
else:
current=current.next
#输出链表的倒数第k个节点构造两个指针遍历链表
def findl(self,n):
if n<1:
return 0
res=list1=list2=listnode(0)
res.next=self.head
for i in range(n):
list1=list1.next
while list1:
list1=list1.next
list2=list2.next
return list2.val
#删除指定数据节点
def del_val(self,val):
tmp=self.head
while tmp.next and tmp.next.data!=val:
tmp=tmp.next
if tmp.next==None:
print('val not in')
else:
tmp.next=tmp.next.next
#指定位置插入
def insert_index(self,index_,val):
node=Node(val)
p=self.head
for i in range(index_):
if p.next==None:
break
else:
p=p.next
node.next=p.next
p.next=node
#删除指定位置节点
def delete_index(self,index):
p=self.head
for i in range(index):
if p.next==None:
break
p=p.next
if p.next==None:
pass
else:
p.next=p.next.next
#清空链表
def clear_list(self):
self.head.next=None
while True:
try:
s=solution()
arr=list(map(int,input().split()))
n=arr[0]
h=arr[1]
s.add(h)
for i in range(n-1):
a=arr[2*i+2]
b=arr[2*i+3]
s.insert(a,b)
s.remove(arr[-1])
s.travel()
s.reverlist()
except:
break
链表 Python
最新推荐文章于 2023-08-03 21:04:34 发布