一个链表中包含环,请找出该链表的环的入口结点
代码:
package offer;
class Node3
{
int val;
Node3 next = null;
Node3(int val)
{
this.val = val;
}
}
public class ti23 {
public static Node3 FindInterNode(Node3 head)
{
if(head==null||head.next==null)
{
return null;
}
Node3 fast = head;//快指针每次走两步
Node3 slow = head;//每次走一步
while(fast!=null && fast.next !=null)//因为fast每次要走两步,所有需要判断fast的下一个是否为空
{
slow = slow.next;
fast = fast.next.next;
//判断是否相遇 相遇后让快指针从头开始走,每次都是走一步,第二次相遇的节点就是环的入口
if(fast.val == slow.val)
{
fast = head;
while(fast.val != slow.val)
{
fast = fast.next;
slow = slow.next;
}
}
if(fast.val == slow.val)
{
return slow;
}
}
return null;//要是没有相遇,此链表没有环返回空
}
public static void main(String[] args)
{
Node3 node1 = new Node3(1);
Node3 node2 = new Node3(2);
Node3 node3 = new Node3(3);
Node3 node4 = new Node3(4);
Node3 node5 = new Node3(5);
Node3 node6 = new Node3(6);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
Node3 head = node1;
node6.next = node3;
System.out.println(FindInterNode(head).val);
}
}