Problem:
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. Ifpos
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?
Analysis:
本题的题意是给予一个链表,查询链表中是否存在一个环。需要判断链表中是否存在一个环,可以设置两个指针,一个慢指针,一个快指针,如果链表中存在环,那么快指针总会追赶上慢指针,因此只需要在程序中设置一个条件来判断,然后返回即可,反之如果链表不存在环,那么遍历链表结束后,会跳出循环返回false。代码如下:
Code:
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null)
return false;
ListNode fastPace = head, lowPace = head;
while(fastPace != null && fastPace.next != null) {
lowPace = lowPace.next;
fastPace = fastPace.next.next;
if(fastPace == lowPace) {
return true;
}
}
return false;
}
}