一个链表中包含环,请找出该链表的环的入口结点。
来源:互联网 发布:网络推广员是做什么的 编辑:程序博客网 时间:2024/06/07 15:40
分析:在此题中,我们定义两个ListNode 变量,分别为fast ,slow 。其中fast 每次向前走走两步,slow 每次向前走一步,这样如果链表中有环的时候fast 和slow 必定会在环中的某一个节点相遇。否则链表中没有环。现在假设链表中环的元素个数是n个,fast 和slow相遇在k节点上,进入环入口前链表元素一共有a个元素。假设slow 在进入环入口前,fast已经走了m圈。所以有2(a+k)=a+m*n+k其中(m为整数,fast 是slow 的两倍),于是就得到了a=m*n-k;所以我们定义一个新的节点 node让他指向链表的头结点,与此同时让node与slow一同向前一步一步的走,当他们两个相等的时候即是链表的环入口
public class Solution{
public ListNode EntryNodeOfLoop(ListNode pHead)
{
ListNode p_node=null;
if(pHead ==null || pHead.next==null){
return null;
}
ListNode fast = pHead;
ListNode slow = pHead;
while(fast !=null && fast.next != null ){
//每次向前走两步
fast=fast.next.next;
//每次向前走一步
slow=slow.next;
if(slow == fast){
//slow与fast相遇的时候
ListNode node=pHead;
while(node !=slow){
node=node.next;
slow=slow.next;
}
return node;
}
}
return null;
}
}
- 一个链表中包含环,请找出该链表的环的入口结点。
- 一个链表中包含环,请找出该链表的环的入口结点
- 一个链表中包含环,请找出该链表的环的入口结点
- 一个链表中包含环,请找出该链表的环的入口结点。
- java面试题(剑指Offer):找出该链表的环的入口结点
- 链表的环的入口结点
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 环的入口结点检测
- 求环的入口结点
- 如何判断一个链表是否有环,如果有环,并找出环的入口
- 首先如何判断一个链表是否有环,并找出环的入口
- 判断一个链表是否有环,并找出环的入口
- 链表------带环链表的环入口结点
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- 找出带环单向链表的环入口(交点)
- Android 项目开发必备-BaseActivity与Fragment的建立
- 【Scikit-Learn 中文文档】把它们放在一起
- 第三周java作业
- java-client新增查找元素方式iOSNsPredicate
- 自定义View中的方法onMeasure,onLayout,onDraw作用
- 一个链表中包含环,请找出该链表的环的入口结点。
- 12月12日培训日记
- Python checkio "Ghosts age"解决方案
- 【Scikit-Learn 中文文档】寻求帮助
- linux上传文件
- 一次树莓派wifi 调试的过程
- capstone训练营2017-12-12
- UIButton 的使用
- SQL简介