141. 环形链表
解题思路
- 使用快慢指针
- 为什么一定会相遇
- 如果链表有环 可以看成一个操场,有两个人在跑步
- 一个人跑得快 一个人跑得慢 那么跑得快一定可以追得上跑得慢 所以一定会相遇
/**
* 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;// 说明不存在环
}
slow = slow.next;
fast = fast.next.next;
}
return true;// fast和slow相遇
}
}