Linked List Cycle II
2015-04-15 21:56
239 查看
设从第一个节点到相遇的节点之间距离为k,从第一个节点到循环开始的节点之间距离为s,一次循环的距离为r,从循环开始的节点到两指针相遇的距离为m(简单推导可知m必小于r,即fast一定会在slow走完循环一次之前追上slow)。k=s+m, 2k-k=nr(n>=1)。由这两个等式可得s+m=nr,因此s=nr-m=(n-1)r+(r-m)。由此可知,从第一个节点到循环开始的节点的距离等于(n-1)个循环的距离加上一个循环减去循环开始的节点到相遇节点之间的距离。
/** * 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(null == head) return null; ListNode slow = head; ListNode fast = head; boolean hasCycle = false; while(null != fast.next && null != fast.next.next){ slow = slow.next; fast = fast.next.next; if(slow == fast){ hasCycle = true; break; } } if(hasCycle){ slow = head; while(slow != fast){ slow = slow.next; fast = fast.next; } return slow; } return null; } }
相关文章推荐
- LeetCode: Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- 142. Linked List Cycle II。
- Linked List Cycle && Linked List Cycle II 解体思路
- Linked List Cycle II
- [LeetCode]Linked List Cycle II
- [算法][LeetCode]Linked List Cycle & Linked List Cycle II——单链表中的环
- LeetCode: Linked List Cycle II
- Linked List Cycle II
- 【leetcode】Linked List Cycle II
- [LeetCode]Linked List Cycle II
- LeetCode Linked List Cycle II 超时问题
- Linked List Cycle II
- 【LEETCODE】142-Linked List Cycle II
- leetcode Linked List Cycle II
- 142. Linked List Cycle II
- leetCode:Linked List Cycle II
- LeetCode | Linked List Cycle II
- [LeetCode] Linked List Cycle II