【LeetCode】2Linked List — 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?

判断单链表是否有环,要有空间复杂度为O(1)。定义一个指针,设置不同步长,如果有环,则两个不同步长的指针会相遇。

/**
 * 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*p=head;
        while(p!=NULL&&p->next!=NULL)
        {
            p=p->next->next;
            head=head->next;
            if(p==head) return true;            
        }
        return false;
        
    }
};

猜你喜欢

转载自www.cnblogs.com/hu-19941213/p/11242072.html
今日推荐