LeetCode 141.环形链表

题目

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

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。题目链接

示例

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

题目分析

第一时间想到使用快慢指针,设置指针p1,每次迭代向前移动一位;指针p2,每次迭代向前移动两位。

两个指针若有一个为空,则表示该链表无环,终止迭代,输出flase

两个指针若在迭代过程中相等,则表示有环,终止迭代,输出true

题目解答

typedef struct ListNode* list;
bool hasCycle(struct ListNode *head) {
    if (head == NULL || head->next == NULL) return false;
    list p1, p2;
    p1 = head;
    p2 = head;
    // 设置标识,保证第一次迭代时不比较p1和p2
    int flag = 0;

    while (p1 != NULL && p2 != NULL){
        if (flag == 0) flag = 1;
        else {
            if (p1 == p2) return true;
        }
        // 若p1或p2的下一位出现空指针,则说明无环
        if (p1->next == NULL || p2->next == NULL) return false;
        else{
            p1 = p1->next;
            p2 = p2->next->next;
        }
    }
    return false;
}

你可能感兴趣的:(LeetCode 141.环形链表)