刷题-牛客-判断链表中是否有环

判断链表中是否有环

题目链接

题目描述

题号:NC4
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
你能给出空间复杂度的解法么?

题目分析

  1. 使用快慢指针,一个指针一次向后移动一步,另一个指针一次向后移动两部
  2. 若快指针的当前结点或下一个结点为nullptr,说明链表无环
  3. 若快指针等于慢指针说明链表有环

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if (!head || !(head->next)) return false;
        ListNode* p1 = head;
        ListNode* p2 = head->next->next;
        while (p2 && p2->next) {
            if (p1 == p2) return true;
            p1 = p1->next;
            p2 = p2->next->next;
        }
        return false;
    }
};
posted @ 2021-06-16 16:44  韩亚光  阅读(52)  评论(0编辑  收藏  举报