力扣算法——141LinkedListCycel【E】

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?

Accepted
 
 
Solution:
  使用快慢指针,若两个指针会重合,那么就有环,否则没有
  
 1 class Solution {
 2 public:
 3     bool hasCycle(ListNode *head) {
 4         if (head == nullptr || head->next == nullptr)return false;
 5         ListNode *slow, *fast;
 6         slow = fast = head;
 7         while (fast && fast->next)
 8         {            
 9             slow = slow->next;
10             fast = fast->next->next;
11             if (fast == slow)
12                 return true;
13         }
14         return false;
15     }
16 };

猜你喜欢

转载自www.cnblogs.com/zzw1024/p/11784556.html