链表的快慢指针方法
1. 快慢指针
指的是有两个指针,每次前进的距离不同
快慢指针的起点都一样:
前进快的就是快指针 前进慢的就是慢指针
快指针每次前进2格 慢指针每次前进一格
2. 常见题目
- 查找链表的中间节点,如果链表长度为奇数,那么只用返回中间的值,如果链表长度为偶数,就返回第二个值
public static ListNode middleNode(ListNode head) {
if(head==null){
return null;
}
ListNode fast=head.next.next;
ListNode low=head.next;
//核心方法在于,此时必须是fast不是null fast.next不是null
while (fast!=null && fast.next!=null){
fast=fast.next.next;
low=low.next;
}
return low;
}
- 判断链表是否有环
public static boolean hasCycle(ListNode head) {
if(head==null || head.next==null){
return false;
}
ListNode fast=head;
ListNode slow=head;
while(fast!=null && slow!=null){
fast=fast.next.next;
slow=slow.next;
if(fast==slow){
return true;
}
}
return false;
}

浙公网安备 33010602011771号