• LeetCode 141. Linked List Cycle


    141. Linked List Cycle

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

    To represent a cycle in the given linked list, we use an integer pos which represents the position (0-indexed) in the linked list where tail connects to. If pos is -1, then there is no cycle in the linked list.

    Example 1:

    Input: head = [3,2,0,-4], pos = 1
    Output: true
    Explanation: There is a cycle in the linked list, where tail connects to the second node.
    

    Example 2:

    Input: head = [1,2], pos = 0
    Output: true
    Explanation: There is a cycle in the linked list, where tail connects to the first node.
    

    Example 3:

    Input: head = [1], pos = -1
    Output: false
    Explanation: There is no cycle in the linked list.
    

    Follow up:

    Can you solve it using O(1) (i.e. constant) memory?

    #include <iostream>
    
    using namespace std;
    
    
    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 *slow = head;
            ListNode *fast = head;
            while (fast && fast->next)
            {
                slow = slow->next;
                fast = fast->next->next;
                if (slow == fast) {
                    return true;
                }
            }
            return false;
        }
    };
    
    
    void test_data()
    {
        ListNode *head = new ListNode(0);
        ListNode *p;
    
        p = head;
        Solution s;
    
        int n = 0;
        int T = 5;
    
        while (T-- && cin >> n)
        {
            ListNode *q;
            q = new ListNode(n);
            p->next = q;
            p = q;
        }
    
        head = head->next;
        p->next = head;          //设置有环
        if (s.hasCycle(head)) {
            cout << "有环
    ";
        }
        else {
            cout << "无环
    ";
        }
    
    }
    
    
    void test_data1()
    {
        ListNode *head = new ListNode(0);
        ListNode *p;
    
        p = head;
        Solution s;
    
        int n = 0;
        int T = 5;
    
        while (T-- && cin >> n)
        {
            ListNode *q;
            q = new ListNode(n);
            p->next = q;
            p = q;
        }
    
        head = head->next;        //不设置有环
        if (s.hasCycle(head)) {
            cout << "有环
    ";
        }
        else {
            cout << "无环
    ";
        }
    }
    
    
    int main()
    {
    
        test_data();
    
        test_data1();
    
        return 0;
    
    }

  • 相关阅读:
    SQL Server如何使用表变量
    Msys/MinGW与Cygwin/GCC(转)
    内存段划分:代码段、数据段、堆、栈
    Codeblocks+MinGW+wxWidgets搭建方法(转)
    Java GUI图形界面开发工具
    MinGW离线安装方法汇总(转)
    Linux系统的启动过程(转)
    详解VOLATILE在C++中的作用(转)
    C++虚函数与纯虚函数用法与区别(转)
    C++中值传递、指针传递和引用传递的比较 (转)
  • 原文地址:https://www.cnblogs.com/douzujun/p/10639307.html
Copyright © 2020-2023  润新知