题目描述:
给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例 1:
输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:
输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:
输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/linked-list-cycle

思路:
首节点附上两个指针,第一个指针每次只遍历一个节点,第二个指针每次遍历两个节点,直到这两个指针所指的节点相同时,则说明有环。

代码:

import chaintable as cclass Solution(c.chainTable):def hasCycle(self, head):""":type head: ListNode:rtype: bool"""node1=head  #走一步node2=head  #走两步while node1.next_node and node2.next_node.next_node:node1=node1.next_nodenode2=node2.next_node.next_nodeif node1==node2:return Truereturn Falseif __name__=='__main__':chain=c.chainTable()head = [3,2,0,-4]pos=1for i in head:chain.append(i)if not pos==-1:n1=chain.headn2=chain.headindex=0while n1.next_node and index<pos:n1=n1.next_nodeindex+=1index=0while n2.next_node and index<len(head)-1:n2=n2.next_nodeindex+=1n2.next_node=n1result=Solution().hasCycle(chain.head)print(result)

链表的实现:

class Node:'''定义节点类data:节点保存的数据next_node:下一个节点对象'''def __init__(self,data,pnext=None):self.data=dataself.next_node=pnextdef __repr__(self):'''定义Node的字符输出print为输出data'''return str(self.data)
'''
链表类:
属性:
链表头:head
链表长度:length
方法:以下
'''
class chainTable:def __init__(self):self.head=Noneself.length=0'判断是否为空列表'def isEmpty(self):return self.length==0'在链表尾增加一个节点'def append(self,dataorNode):item = Noneif isinstance(dataorNode, Node):item = dataorNodeelse:item = Node(dataorNode)if not self.head:self.head=itemself.length+=1else:node=self.head'循环至最后一个节点'while node.next_node:node=node.next_nodenode.next_node=itemself.length+=1'删除一个节点'def delete(self,index):if self.isEmpty():print("Sorry,the chain table is empty")returnif index<0 or index>=self.length:print("Error:out of index")returnif index==0:self.head=self.head.next_nodeself.length-=1returnIndex=0node=self.headpre_node=self.headwhile node.next_node and Index<index:pre_node=nodenode=node.next_nodeIndex+=1if Index==index:pre_node=node.next_nodeself.length-=1'修改一个节点'def update(self,index,data):if self.isEmpty()or index<0 or index>=self.length:print("Error:out of index")returnIndex=0node=self.headwhile node.next_node and Index<index:node=node.next_nodeIndex+=1if Index==index:node.data=data'查找并得到一个节点'def getItem(self,index):if self.isEmpty()or index<0 or index>=self.length:print("Error:out of index")returnIndex=0node=self.headwhile node.next_node and Index<index:node=node.next_nodeIndex+=1return node.data'查找一个节点的索引'def getIndex(self,data):if self.isEmpty():print("Sorry,the chain table is empty")returnIndex=0node=self.headwhile node:if node.data==data:return Indexnode=node.next_nodeIndex+=1if Index==self.length:print("\"%s is not found\",%str(data)")return'插入一个节点'def Insert(self,index,dataorNode):if self.isEmpty():print("Sorry,the chain table is empty")returnif index<0 or index>=self.length:print("Error:out of index")returnitem=Noneif isinstance(dataorNode,Node):item=dataorNodeelse:item=Node(dataorNode)if index==0:item.next_node=self.headself.head=itemself.length+=1returnIndex=0node=self.headprev=self.headwhile node.next_node and Index<index:prev=nodenode=node.next_nodeIndex+=1if Index==index:item.next_node=nodeprev.next_node=itemself.length+=1'清空链表'def clear(self):self.head=Noneself.length=0def __repr__(self):if self.isEmpty():return "The chain table is empty"node=self.headnlist=''i=0while Node:if node.next_node:nlist+=str(node.data)+'->'node=node.next_nodeelse:nlist+=str(node.data)+'->None'node=node.next_nodereturn nlistdef __getitem__(self, ind):if self.isEmpty() or ind < 0 or ind >= self.length:print("error: out of index")returnreturn self.getItem(ind)def __setitem__(self, ind, val):if self.isEmpty() or ind < 0 or ind >= self.length:print("error: out of index")returnself.update(ind, val)def __len__(self):return self.length

环形链表(python实现)相关推荐

  1. python 环形链表

    |环形链表 给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 po ...

  2. c++ 怎样连接两个链表_LeetCode | 链表的入口,一文帮你搞定“环形链表”(python版,最简单解析)...

    链表节点的定义 链表作为一种数据结构,由链表节点互相连接构成. 链表节点包含自身的数据和一个指向下一节点的指针. """ Definition of ListNode & ...

  3. python环形链表的使用

    文章目录 1 链表的建立 2 链表的遍历 3 环形链表的建立 4 环形链表的遍历 5 环形链表建立和遍历代码示例 1 链表的建立 # 首先定义一个链表 class linked_list_name:d ...

  4. LeetCode 142. 环形链表 II - Python 快慢指针法+详解

    题目 142. 环形链表 II 难度中等761 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的 ...

  5. 刻意练习:LeetCode实战 -- Task09. 环形链表

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  6. LeetCode实战:环形链表

    题目英文 Given a linked list, determine if it has a cycle in it. To represent a cycle in the given linke ...

  7. 丢手帕java_java基于双向环形链表解决丢手帕问题的方法示例

    本文实例讲述了java基于双向环形链表解决丢手帕问题的方法.分享给大家供大家参考,具体如下: 问题:设编号为1.2--n的几个小孩围坐一圈,约定编号为k(1= 我们现在用一个双向环形链表来解这一问题. ...

  8. 基础数据结构【四】————环形链表与多项式

    主要演示环形列表节点的创建插入, 删除,遍历,环形链表连接 .双向链表节点的建立与插入 ,双向链表中节点的删除 以及环形链表在多项式中的应用 DEMO1:环形链表节点的创建与插入 /* [名称]:ch ...

  9. LeetCode实战:环形链表 II

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a lin ...

  10. 【Java】环形链表 ( 给定一个链表,判断链表中是否有环)

    题目描述 :给你一个链表的头节点 head ,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,评测系统内部使用整数 po ...

最新文章

  1. Confluence 6 手动安装语言包和找到更多语言包
  2. Leet Code之Number of 1 bits
  3. SQL 与NoSQL
  4. Nginx支持比Apache高并发的原因
  5. 你是个失败者,有什么资格说话?
  6. leetcode1247. 交换字符使得字符串相同(贪心)
  7. Debian 10(buster) 更换国内软件源
  8. 【Python笔记】网络编程
  9. 解决uploadify在Firefox下丢失session的问题
  10. 摆脱臃肿--Unity3D安卓包减肥秘笈
  11. 关于springmvc配置validator的注意事项
  12. oracle rpad()函数
  13. 苹果屏蔽更新_苹果手机屏蔽IOS更新描述文件失效,越狱用户的紧急解决方案
  14. 怎样使计算机桌面有励志壁纸,适合电脑的高清励志桌面壁纸
  15. MySQL 数据归档清理方法
  16. GTK开发(一)创建第一个窗口
  17. 张小龙的30条产品法则
  18. qcon_从QCon San Francisco 2009中学到的重点知识和教训
  19. 驱动器能耗制动和制动电阻
  20. 使用键盘录入给选手打分

热门文章

  1. Dobot Magician 机器臂-简介
  2. php 轮播图插件下载,jquery全屏响应式轮播图插件jquery.flexslider.js
  3. 你躲得过AI带来的就业大崩溃吗?这5本书助你跟你的焦虑和解
  4. Chip天线(WiFi/蓝牙陶瓷芯片天线) 选型
  5. 【007】微软Aim Writing-智能英文写作平台
  6. svga文件预览_Android动画SVGA的使用
  7. win7计算机左边增加桌面,技术帖,win7如何在任务栏左下角添加“显示桌面”图标。...
  8. 迅捷CAD编辑器怎么打开dwg文件
  9. echarts 图表案例社区
  10. 使用golang 实现deflate、zlib压缩解压数据