python实现循环链表,判断链表有环python

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: