【leetcode】Linked List Cycle II
2015-07-30 19:12
323 查看
class Solution { public: ListNode *detectCycle(ListNode *head) { if(head == NULL || head->next == NULL) return NULL; ListNode *fast = head; ListNode *slow = head; while(fast && fast->next){ fast = fast->next->next; slow = slow->next; if(slow == fast) break; } if(fast != slow) return NULL; fast = head; while(fast != slow){ fast = fast->next; slow = slow->next; } return fast; } };
以上是AC代码
还是利用双指针法:fast slow 两指针
这道题的关键是要明白:
如果有环的话: //以下结论的证明可以在网上搜一搜
首先fast和slow两个指针一定会相遇!!
第一次相遇之后,退出循环,记录相遇时的slow指针 然后把fast 指针重新放回链表开头
第二次相遇时,就是环的入口 然后返回入口节点即可。
相关文章推荐
- HDU 5335 Walk Out
- 怎样VS2013下安装Qt5的插件
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- BZOJ 2208 [Jsoi2010]连通数 tarjan缩点+bitset优化DP
- UI01_UIView
- hdu 5335 Walk Out
- iOS支付宝支付步骤
- 如果让我重新设计一款Android App
- 两个sql查询语句之间的左连接left join
- 使用GridView以表格形式显示多张图片
- 可动态切换日历demo
- HDU 5328 Problem Killer
- 关于 android 程序中的 context
- JSON详解
- 暴力求解——POJ 1321 棋盘问题
- 发布一个UDP调试助手
- HDU 5327 Olympiad
- 程序员加入新团队的那些坑
- Android studio build.gradle配置,debug下使用正式签名,重命名apk
- iOS KVC 概述