LeetCode Linked List Cycle

/**

 * 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) return false;

        ListNode* fast = head;

        ListNode* slow = head;

        while (step(fast, 2) && step(slow, 1)) {

            if (fast == slow) break;

        }

        return fast != NULL;

    }

    

    bool step(ListNode* &node, int n) {

        while (node != NULL && n > 0) {

            node = node->next;

            n--;

        }

        return n == 0;

    }

};

水一发

第二轮:

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

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

必做题

 1 /**

 2  * Definition for singly-linked list.

 3  * struct ListNode {

 4  *     int val;

 5  *     ListNode *next;

 6  *     ListNode(int x) : val(x), next(NULL) {}

 7  * };

 8  */

 9 class Solution {

10 public:

11     bool hasCycle(ListNode *head) {

12         if (head == NULL) {

13             return false;

14         }

15         ListNode* fast = head->next;

16         ListNode* slow = head;

17         while (fast != NULL && fast->next != NULL) {

18             if (fast == slow) {

19                 break;

20             }

21             slow = slow->next;

22             fast = fast->next->next;

23         }

24         return fast == slow;

25     }

26 };

 

你可能感兴趣的:(LeetCode)