码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]Linked List Cycle II

时间:2014-12-29 21:35:30      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:java   leetcode   

Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Follow up:
Can you solve it without using extra space?

首先设圆环的长度为r,距离环口为a时相遇,环外的那一段的距离是b,那么有2(a+b)=a+b+nr ,n>1;

所以有a+b = nr;   进一步有 b+ pr = (r-a)+qr,即从头指针和当前相遇位置的指针以相同速度移动一定在环口位置相遇


/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
	public ListNode detectCycle(ListNode head) {
		if(head==null) return null;
		ListNode slow2 = head;
		ListNode slow = head;
		ListNode fast = head;
		boolean isCycle = false;
		while(fast!=null&&fast.next!=null){
			slow = slow.next;
			fast = fast.next.next;			
			if(slow == fast) {
				isCycle =  true;
				break;
			}
		}
		if(isCycle){
			while(slow2!=slow){
				slow = slow.next;
				slow2 = slow2.next;
			}
			return slow;
		}else{
			return null;
		}
	}
}


[LeetCode]Linked List Cycle II

标签:java   leetcode   

原文地址:http://blog.csdn.net/guorudi/article/details/42242703

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!