题解 | #判断链表中是否有环#
判断链表中是否有环
https://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9
import java.util.*; /** * 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) { boolean flag = false; //慢指针 ListNode slow = head; // 快指针 ListNode fast = head; if (head == null) { return false; } while (true) { if (slow.next == null || fast.next == null || fast.next.next == null) { break; } slow = slow.next; fast = fast.next.next; if (slow == fast) { flag = true; break; } } return flag; } }
- 快慢指针解决链表出现的回环的问题。
- 如果有环两个指针一定会相遇。
- 如果没有环就一定回到终点,也就是会指向null。 如果链表没有环,快指针会先到达链表的末尾 (
null
),退出循环。
判断能否到达尾部,fast.next==null 预判下一个或者后两个是否为空。