剑指Offer(Java版)第二十一题:链表中环的入口结点

Posted 桌子哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer(Java版)第二十一题:链表中环的入口结点相关的知识,希望对你有一定的参考价值。

/*
链表中环的入口结点
*/
//思路,使用两个指针,一个快,一个慢,如果快的指针与慢的指针同时直到同一个节点,那么存在环。
public class Class21 {
//复杂问题分解成为几个简单问题(本题分为三步:找出环中任一结点;得到环的个数;找到入口结点)
static class ListNode{
int val;
ListNode next = null;
ListNode(int val){
this.val = val;
}
}

public ListNode findCircleNode(ListNode head){
if(head == null){
return null;
}
ListNode Slow = head;
ListNode Fast = head;
while(Fast != null){
Fast = Fast.next;
Slow = Slow.next;
if(Fast != null){
Fast = Fast.next;
}
if((Slow != null) && (Slow == Fast){
return Slow;
}
}
return null;
}

public ListNode theDoorOfCircle(ListNode head){
ListNode findCircleNode = findCircleNode(head);
if(findCircleNode == null){
return null;
}
int numOfCircle = 1;
ListNode newNode = findCircleNode.next;
while(newNode != findCircleNode){
numOfCircle++;
newNode = newNode.next;
}
newNode = head;
for(int i = 0; i < numOfCircle; i++){
newNode = newNode.next;
}
ListNode newNode2 = head;
while(newNode != newNode2){
newNode = newNode.next;
newNode2 = newNode.next;
}
return newNode;
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

以上是关于剑指Offer(Java版)第二十一题:链表中环的入口结点的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer第二十一题 栈的压入弹出序列

剑指offer(二十三,二十四,二十五)最小的k个数,连续子数组的最大和,链表中环的入口节点

剑指Offer(Java版)第十一题

剑指Offer55:链表中环的入口结点(Java)

剑指offer 55.链表 链表中环的入口结点

剑指Offer - 面试题23:链表中环的入口节点