链表中环的入口结点

来源:互联网 发布:squid安装到linux 编辑:程序博客网 时间:2024/05/29 07:00

题目描述

一个链表中包含环,请找出该链表的环的入口结点。

编程思路

定义两个指针slow和fast,第一次走,slow和fast都从头结点开始,slow每次走一步,fast每次走两步,当slow和fast相遇时,fast比slow多走 的步数就是环中的结点数。第二次走,slow还是从头结点开始,而fast从第一次slow和fast相遇的结点开始,直到slow和fast再次相遇时,这次相遇的结点就是该链表的环的入口结点。

程序代码

 public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}public class Solution {   public ListNode EntryNodeOfLoop(ListNode pHead)    {        if(pHead == null)            return null;        ListNode slow = pHead;        ListNode fast = pHead;      do {           if(fast.next == null)               return null;           slow = slow.next;           fast = fast.next;           if(fast.next == null)                return null;           fast = fast.next;       } while(slow != fast);       slow = pHead;       while(slow != fast) {           slow = slow.next;           fast = fast.next;       }       return slow;    }}




原创粉丝点击