lintcode-102-带环链表

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;
    }
};
posted @ 2017-07-14 08:41  LiBaoquan  阅读(552)  评论(0编辑  收藏  举报