leetcode:linked_list_cycle_II
来源:互联网 发布:招风耳矫正知乎 编辑:程序博客网 时间:2024/04/28 19:04
一、 题目
给定一个链表,如果链表中有环则返回环的开始节点,否则返回NULL。要求不用额外的空间完成。
二、 分析
在I中,我们判断环的存在,即用slow和fast两个指针,设定步长fast=2;slow=1;如果两个指针可以相遇则环存在,此时如果二者相遇我们只需将slow=head;同时设置两者步长都为1,则两者再次相遇的节点即为环的开始节点。
推导过程:(图烂勿吐)
当两者第一次相遇时,
slow走过S1=x + y;
fast走过S2=x + y + z + y,
又知S2=2 * S1;
所以,2 *(x+y) = x + y + z + y;
故,x = z;
<span style="font-size:18px;">/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *detectCycle(ListNode *head) { ListNode *slow = head; ListNode *fast = head; while(fast!=NULL&&fast->next != NULL) { slow = slow->next; fast = fast->next->next; if(slow==fast) break; } if(fast==NULL||fast->next==NULL) { return NULL; } slow=head; while(slow!=fast) { slow = slow->next; fast = fast->next; } return fast; }};</span>
0 0
- leetcode:linked_list_cycle_II
- 【leetcode】 Linked_List_Cycle_II
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- POJ-1328-Radar Installation
- 第九周项目三输出星号图(a)
- description的覆写【数组的详细输出】
- 从Spring For Android开始对Android的研究——一个完整的例子
- 贪心算法---n个数连接得到最小或最大的多位整数
- leetcode:linked_list_cycle_II
- JSP工作原理
- Android 应用-->JNI-->Kernel调用流程
- new和malloc的区别
- 一个简单的工厂模式
- 分享Oracle密码忘记找回的办法
- JS 全屏代码
- 【翻译】在Sencha应用程序中使用插件和混入
- PHP 5.5新特性