python实现循环链表,判断链表有环python
本文主要详细介绍Python对循环链表的实现。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享Python循环链表的具体代码,供大家参考。具体内容如下。
我们把单向链表最后一个节点的指针指向链表的头(第一个节点),那么就形成了一个循环链表。环形节点可以从任何节点开始,并遍历其他节点。
这里主要实现了循环链表中节点的遍历、添加、插入、删除和倒置。
代码如下:
班级播放器:
节点类
def __init__(self):
初始化名称,分数,指针
self.name=
self.score=0
self.next=无
def遍历(head,num=None,is_print=False):
遍历函数,num是要遍历哪个位置的序号,is_print是否触发打印方法
如果head.next为None:
不返回
ptr=头
计数=0
而True:
计数=1
如果是_print:
打印(编号字符串(计数),指针名称,指针得分,-,指针下一个名称)
如果count==num:
破裂
if ptr.next==head:
破裂
ptr=ptr.next
Ptr #在遍历完成后返回最后一个节点
Def invert(x): # x是链表的第一个节点。
反转循环链表
Y=x.next # y是x的原next。
X.next=遍历(x) #将第一个节点的next指向最后一个节点(因为它是反转的)
而True: #循环则反转以下所有节点。
r=y .接下来
y.next=x
R==head3360 # R是head,表示Y是原始链表中的最后一个节点。
Y #返回Y,这是倒排链表的第一个节点。
x=y
y=r
head=Player()
ptr=头
而True:
Select=input((1))。添加(2)。视图(3)。插入(4)。删除(5)。反转(6)。离开\ n输入:)
Select== 1 : #添加新节点
Ptr=遍历(head) #获取当前链表的最后一个节点
如果ptr为None: # ptr为None,表示当前正在添加第一个节点头。
Head.name=input (name:)
Head.score=input (score:)
head.next=head
Else: #在第一个节点后添加节点
next_data=Player()
Next_data.name=input (name:)
Next_data.score=input (score:)
next_data.next=head
ptr.next=next_data
Eliselect== 2 : #遍历查看列表中的所有节点。
遍历(head,is_print=True) #遍历链表并将打印参数设置为True。
Eliselect== 3 3360 #在链表中的任意位置插入一个节点,位置用序号表示,即第一个节点序号为1,第二个节点序号为2,以此类推。
尝试:
Num=int(input(请输入要插入的节点位置的序号:)#输入的序号必须是大于0的正整数,大于最后一个节点就插入最后一个节点之后。
如果编号为1:
打印(“输入必须是大于0的正整数”)
继续
除了ValueError:
打印(“输入错误”)
继续
Ptr=遍历(head,num-1) #获取需要插入的前一个节点。
插入数据=播放器()
Insert_data.name=input (name:)
Insert_data.score=input (score:)
insert_data.next=ptr.next
ptr.next=insert_data
如果num==1: #如果插入位置为1,那么磁头将会改变
head=插入数据
Eliselect== 4 : #删除链表中的任何节点。
尝试:
Num=int(input(请输入要删除的节点位置的序号:)#输入的序号必须是大于0的正整数,大于最后一个节点则删除最后一个节点。
如果编号为1:
打印(“输入必须是大于0的正整数”)
继续
除了ValueError:
打印(“输入错误”)
继续
Ptr=遍历(head,num-1) #获取要删除的位置的前一个节点
如果ptr==遍历(head,num): #当输入序列号过大时,需要做特殊处理,因为输入序列号过大,也意味着删除最后一个节点。然后我需要得到这个最后一个节点的前一个节点。
ptr=遍历(ptr)
ptr.next=ptr.next.next
如果num==1: #如果删除位置是1,那么头部将改变
head=ptr.next
Eliselect== 5 : #反转链表
New_first=invert(head) #获取新的第一个节点
Head=new_first #头指向新的第一个节点
打印(“成功冲销”)
elif select==6:
打印(“成功离开”)
破裂
else:
打印(“输入错误,请重试”)
一些运行结果如下:
这就是本文的全部内容。希望对大家的学习有所帮助,也希望大家能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。