Linked List Cycle II
来源:互联网 发布:小说大纲软件 编辑:程序博客网 时间:2024/05/01 23:34
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Note: Do not modify the linked list.
Follow up:
Note: Do not modify the linked list.
Follow up:
Can you solve it without using extra space?
思路:找到一个有环链表的起始节点。定义两个指针,一个指针每次走一步,一个指针每次走两步。这样,当两者相遇的时候说明整个链表含有环。当两者第一次相遇的时候,快指针走的路径是慢指针的两倍。可以得出从第一次相遇的地方到链表环起始节点的距离和从链表head开始到循环起始节点的距离是相等的。这样,再遍历一次链表即可。
/** * 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(true) { if(fast==NULL || fast->next==NULL) return NULL; slow=slow->next; fast=fast->next->next; if(slow==fast) break; } //跳出循环说明有环 slow=head; while(slow!=fast) { slow=slow->next; fast=fast->next; } return slow; }};
0 0
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- Linked List Cycle II
- VideoView的onPreparedListener
- 大神级程序员和普通程序员的区别
- Spark自定义分区(Partitioner)
- Mybatis Generator(代码生成器)
- POJ 1611 The Suspects( 并查集)
- Linked List Cycle II
- 包装流(BufferedReader)
- OpenResty学习笔记(一)数据结构与控制流
- 如何解决atom无法安装package的问题(gyp WARN install got an error, rolling back install)
- SpringMVC之ContentNegotiatingViewResolver详解
- github
- QML学习文档
- 修改MySql的存储过程、函数、事件、触发器、视图的 DEFINER
- php 新特性trait介绍(1)