找出链表环的入口
时间:2020-05-19
本文章向大家介绍找出链表环的入口,主要包括找出链表环的入口使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问题:
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
分析:快慢指针+公式推导
参考:https://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da16833f79a38e4?f=discussion(来源:牛客网)
code:
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode EntryNodeOfLoop2(ListNode pHead){ //参考的别人的代码:快慢指针+公式推导 /* 推导结果:如果存在循环 (1)第一次出发:快指针(一次走两步),慢指针一次一步,最终一定会在环的某点相遇 (2)第二次出发:两个指针分别从头结点和相遇节点出发,最后一定会在环入口节点相遇 */ if(pHead==null){ return null; }else{ ListNode low= pHead; ListNode fast = pHead; while(fast!=null &&fast.next!=null){ fast = fast.next.next; low = low.next; if(fast==low) break; } //没找到环 if(fast==null || fast.next==null) return null; //找到环,根据结论2寻找环入口 fast=pHead; while(fast!=low){ fast = fast.next; low = low.next; } return fast; } }
大佬的代码:
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode EntryNodeOfLoop(ListNode pHead) { ListNode fast=pHead; ListNode low=pHead; while(fast!=null&&fast.next!=null){ fast=fast.next.next; low=low.next; if(fast==low) break; } if(fast==null||fast.next==null) return null; low=pHead; while(fast!=low){ fast=fast.next; low=low.next; } return low; }
原文地址:https://www.cnblogs.com/dream-flying/p/12919979.html
- Oracle 12cR2初体验(r11笔记第91天)
- MySQL中的undo截断(r11笔记第89天)
- Linux系统 df 命令显示异常、分区丢失问题解决
- MySQL主从、字典死锁、连接数的Python监控脚本
- MySQL Online DDL(二)(r11笔记第88天)
- 转-Android上面运行golang
- Golang适合高并发场景的原因分析
- 浅谈MySQL中的事务隔离级别(r11笔记第86天)
- 巧用echo命令解决Samba批量添加用户难题
- 分分钟搭建MySQL Group Replication测试环境(r11笔记第82天)
- MySQL 5.7 Group Replication错误总结(r11笔记第84天)
- 空结构体struct{}解析
- 动态创建MySQL Group Replication的节点(r11笔记第84天)
- sysbench压测小记(r11笔记第99天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java解析XML的方法
- 听说Mysql你很豪横?-------------各种数据库介绍(为什么Mysql数据库能这么火热)
- Vuex的简单入门
- 听说Mysql你很豪横?-------------管理MySQL数据库基本操作命令
- Axios安装封装api接口
- 排障集锦:九九八十一难之第七难!mysql数据库登录密码忘记了
- Css实现上下无限跳动
- 排障集锦:九九八十一难之第八难!ERROR 2002 (HY000): Can‘t connect to local MySQL server
- Vue Router配置参数、404页面
- 机器学习之决策树三-CART原理与代码实现
- Vue Router路径切换过渡动画
- 听说Mysql你很豪横?-------------深入解析mysql数据库中的索引!
- 听说Mysql你很豪横?-------------深入解析mysql数据库中的事务!
- Struts2笔记
- Vue Router实现路由嵌套单页面展示