您的位置:首页 > 其它

lintcode-102-带环链表

2017-07-14 08:41 253 查看

102-带环链表


给定一个链表,判断它是否有环。

样例

给出 -21->10->4->5, tail connects to node index 1,返回 true

挑战

不要使用额外的空间

标签

链表 两根指针


思路

快慢指针的典型应用,使用块指针 fast 与慢指针 slow,slow每次后移一位,fast 每次后移两位,当fast 与 slow 指向同一节点时,说明存在环。就如同操场跑圈时,领先一圈的人会遇上跑在他后面的人那样。

code

/**
* Definition of ListNode
* class ListNode {
* public:
*     int val;
*     ListNode *next;
*     ListNode(int val) {
*         this->val = val;
*         this->next = NULL;
*     }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: True if it has a cycle, or false
*/
bool hasCycle(ListNode *head) {
// write your code here
ListNode * fast = head, *slow = head;

while(fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;

if(fast == slow) {
return true;
}
}

return false;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: