141.环形链表
使用快慢指针:
定义两个指针,一快一慢,慢指针每次只移动一步,而快指针每次移动两步。初始时,慢指针在位置head,而快指针在位置head.next,这样,如果在移动的过程中,快指针反过来追上慢指针,就说明该链表有环,否则快指针将到达链表尾部,该链表不为环形链表
/**
* 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 fast = head.next;
ListNode slow = head;
while(fast!=slow){
if(fast == null || fast.next == null){
return false;
}
fast = fast.next.next;
slow = slow.next;
}
return true;
}
}