中文描述:
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?
中文理解:给出一个链表,求出该链表是否存在环。
解题思路:使用快慢指针方法,一个指针一次走一步,一个指针一次走两步,若两个指针值在某一处相同了,那该链表存在环,若任意一个指针走到了null,则该链表不存在环。
代码(java):
/**
* 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 || head.next.next==null)return false;
else{
ListNode pFast=head.next.next;
ListNode pSlow=head.next;
while(pFast!=pSlow){
if(pFast.next==null || pFast.next.next==null)return false;
pFast=pFast.next.next;
if(pSlow.next==null)return false;
pSlow=pSlow.next;
}
return true;
}
}
}