142. Linked List Cycle II LeetCode
2016-02-16 19:07
351 查看
题意:求链表中环的第一个节点。
题解:用slow和fast。假设起点是a,第一个进入环的节点是b,slow和fast相遇的节点是c。那么有2(ab + bc) = ab + bc + cb + bc。
ab = cb。所以我们让slow和fast先相遇,这时得到slow和fast都是c点,然后slow再从链表头开始走,直到slow与fast相等,这时候的slow和fast都是b点。
题解:用slow和fast。假设起点是a,第一个进入环的节点是b,slow和fast相遇的节点是c。那么有2(ab + bc) = ab + bc + cb + bc。
ab = cb。所以我们让slow和fast先相遇,这时得到slow和fast都是c点,然后slow再从链表头开始走,直到slow与fast相等,这时候的slow和fast都是b点。
class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode* fast,*slow; fast = slow = head; while(fast && fast->next) { fast = fast->next->next; slow = slow->next; if(fast == slow) { slow = head; while(slow != fast) { slow = slow->next; fast = fast->next; } return slow; } } return NULL; } };
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解