【题解】leetcode-141环形链表

2020-10-08  本文已影响0人  科瑞Krits

题目描述

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

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。

解题思路

查看一个链表中是否有环的经典解题思路就是使用快慢指针(双指针),即一个慢指针和快指针同时从头节点出发,如果链表中有环,则两指针在之后一定会相遇,否则,不相遇。其中,慢指针的步长为1,而快指针的步长为2。

代码

/**
 * 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 == NULL || head->next == NULL)
            return false;
        ListNode* p1 = head;
        ListNode* p2 = head->next->next;

        while (p1 != p2 && p1 != NULL && p2 != NULL && p2->next != NULL){
            p1 = p1->next;
            p2 = p2->next->next;
        }
        return p1 == p2 && p1 != NULL && p2 != NULL && p2->next != NULL;
    }
};
上一篇下一篇

猜你喜欢

热点阅读