一、双指针法
使用两个指针遍历链表,一般有以下几种使用情况:
- 快指针走两步,慢指针走一步:判断链表是否有环、找到链表中点
- 快指针先走,到一定判断条件后慢指针再走:找倒数第几个节点
- 双指针交叉遍历两个链表:相交链表
力扣141:环形链表
若存在环,快慢节点总会在环中相交
var hasCycle = function(head) {
if(!head) return false;
let slow = fast = head;
// 进入循环
while(slow != fast || slow == head) {
if(slow && slow.next) {
slow = slow.next;
} else {
return false;
}
if(fast && fast.next) {
fast = fast.next.next;
} else {
return false;
}
if(slow == fast) return true;
}
};
力扣142:环形链表2
快慢指针相遇后,让慢指针重新指向链表头部,快慢指针接下来都走一步。