判断一个链表是否有环
思路:我们定义一个快指针,一个慢指针;都从头结点开始走,快指针每次走两步,慢指针一次走一步,则:
- 如果一个链表有环,那么两个指针在一直走的过程中一定会相遇。
- 如果链表没有环,那么快指针一定会先走完链表,指向null。
/**
* 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) {
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
if(slow == fast){
return true;
}
}
return false;
}
}