当前位置: 首页 > news >正文

快慢指针判断链表是否有环

快慢指针判断链表是否有环

单链表有可能存在环,有些情况下要判断一个单链表是否有环。数组的有个快慢指针的方法,其实单链表和数组有相似的地方,可以使用快慢指针的方法。具体做法如下:

首先创建两个指针,它们初始时指向链表的头部。然后令一个指针一次移动一个节点,另外一个指针一次移动两个节点。然后比较两个指针指向的节点是否相同。如果相同,则判断出链表有环,如果不同,则继续进行。

代码如下:

     /*** 根据索引得到链表的某个节点的值* @param key* @return*/public Object getNode(int key) {if (key < 0 || key > size - 1) {throw new ArrayIndexOutOfBoundsException("越界!");} else {Node temp = head;int count = 0;while (temp != null) {if (count == key) {return temp.data;}temp = temp.next;count++;}}return null;}/*** 从头开始,依次与给定索引位置的节点的值进行比较,如果相同,则返回true,否则false* @param key* @return*/public boolean havaSameElement(int key) {boolean flag = false;int count = 0;Node temp = head;while (temp != null && count < key) {if (temp.data == getNode(key)) {flag = true;return flag;}count++;temp = temp.next;}return flag;}/*** 方式1* @return*/public boolean isAnnulate1() {boolean flag = false;for (int i = 1; i < size; i++) {if (havaSameElement(i)) {flag = true;break;}}return flag;}

很简单的思路是把原始链表转化为一条反转链表,然后比较这两条链表是否是一样的。因为链表没法使用双指针的方法。

另一种比较难的方法是使用二叉树的后序遍历的思路,不需要明显的使用反转链表也可以倒序遍历链表,下面来具体讨论这个问题:

二叉树的遍历操作也是递归算法。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

http://www.lryc.cn/news/21308.html

相关文章:

  • 《MongoDB入门教程》第26篇 聚合统计之$max/$min表达式
  • FPGA纯verilog解码SDI视频 纯逻辑资源实现 提供2套工程源码和技术支持
  • JVM篇之垃圾回收
  • 尝试用程序计算Π(3.141592653......)
  • 【异常检测三件套】系列3--时序异常检测综述
  • 关于SAP 错误日志解析
  • java:自定义变量加载到系统变量后替换shell模版并执行shell
  • Redis高级删除策略与数据淘汰
  • 社畜大学生的Python之pandas学习笔记,保姆入门级教学
  • 20_FreeRTOS低功耗模式
  • Hive的使用方式
  • Flume三大核心组件
  • 数据结构(六)二叉树
  • Docker buildx 的跨平台编译
  • 【java基础】方法重载和方法重写
  • Gradle7.4安装与基本使用
  • [系统安全] 虚拟化安全之虚拟化概述
  • 如何从零开始系统的学习项目管理?
  • 面试题-----
  • 线材-电子线载流能力
  • 单变量回归问题
  • ubuntu/linux系统知识(36)linux网卡命名规则
  • java的一些冷知识
  • java代理模式
  • JUC包:CountDownLatch源码+实例讲解
  • Log4j2基本使用
  • A2L在CAN FD总线的使用
  • Android JetPack之启动优化StartUp初始化组件的详解和使用
  • [11]云计算|简答题|案例分析|云交付|云部署|负载均衡器|时间戳
  • C++11/C++14:lambda表达式