快慢指针
慢指针一次走一步,快指针一次走两步,环形链表,最后一定会碰到。
public class A06hasCycle {
public boolean hasCycle(ListNode head) {
ListNode slow = head; // 慢指针
ListNode fast = head; // 快指针
// 快指针不为null且下一个节点也不为null,一直循环
while (fast != null && fast.next != null) {
slow = slow.next; // 慢指针一次走一步
fast = fast.next.next; // 慢指针一次走两步
// 循环过程中,如果快慢指针重合,说明有环
if (slow == fast) {
return true;
}
}
// 快指针为null,说明无环
return false;
}
}
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {this.val = val;}
ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}
标签:----,ListNode,val,fast,next,链表,Java,null,指针
From: https://blog.csdn.net/m0_74117790/article/details/144784474