Linked List Cycle II
2015-07-09 11:17
281 查看
<pre name="code" class="cpp">/** * 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* h1 = head, *h2 = head; //h1走一步,h2走两步,两个值必定会相遇 while(NULL != h1 && NULL != h2) { h1 = h1->next; h2 = h2->next; if(h2 == NULL) return NULL; h2 = h2->next; if(h1 == h2)//如果相遇,则表示有环。 { h1 = head; while(h1 != NULL && h2 != NULL)//一个从头走,一个从之前相遇的位置走,则必定会在第一个相交点遇见。 { if(h1 == h2)//说明head就是第一个相遇点 { return h1; } h1 = h1->next; h2 = h2->next; } break; } } return NULL; } };
相关文章推荐
- 软件测试方法汇总
- LXC Linux Containers内核轻量级虚拟化技术
- 正则表达式
- 判断jQuery对象或dom对象是否存在
- Android 代码混淆
- 删除.SVN+批量删除/增加文件
- VS 20** OpenGL 配置
- 六年软件测试感悟
- Algorithms—53.Maximum Subarray
- php链表用法实例分析
- 黑马程序员——C语言基础---指针
- 实验室设备管理系统
- find命令
- LXC容器
- 关于oozie时区的设置
- HTTP协议详解
- ADT中设置代码字体
- grunt学习2
- POJ 2247 && HDU 1058 Humble Numbers(数论)
- 编译64bit Linux Kernel 时报 genksyms 找不到