LeetCode 141. Linked List Cycle

来源:互联网 发布:midi 入门 软件 编辑:程序博客网 时间:2024/06/05 11:54

141. Linked List Cycle

一、问题描述

Given a linked list, determine if it has a cycle in it.

Follow up:
Can you solve it without using extra space?

二、输入输出

有环 输出:true

无环 输出:false

三、解题思路

  • 判断链表是否有环是特别经典的题目,使用两个指针,一个步长为一,另一个步长为二。如果他们在到达末尾之前相遇了就说明有环,否则就无环退出。
/** * 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) {        ListNode *p1 = head, *p2 = head;        while(p1 != NULL && p2 != NULL && p2->next != NULL){            p1 = p1->next;            p2 = p2->next->next;            if(p1 == p2) return true;        }        return false;    }};