欢迎来到我的小小世界

Change is a million times less painful than regret

0%

双指针类型以及应用场景

双指针可以分为两类,一类是「快慢指针」,一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。

快慢指针的常用的算法

快慢指针初始阶段一般都指向头结点head,前进时快指针fast在前,慢指针slow在后,可以解决链表中的某些问题。

判断链表中是否有环

单链表的特点是每个节点只知道下一个节点,所以一个指针无法确定链表中的是否存在环。
如果链表中不含环,那个这个指针最终会遇到空指针null表示链表到头了,这可以表示链表中不存在环

1
2
3
4
5
boolean hasCycle(ListNode head) {
while (head != null)
head = head.next;
return false;
}

但是如果链表中存在环,那么这个指针就会陷入死循环,因为环形数组中无法提供用来作为结束的null指针。
经典解法就是使用两个指针,一个快指针,一个慢指针。如果不含环,快指针一定会遇到null指针,表示已经到头,证明不含环;如果含有环,快指针最终会和慢指针相遇,这就表明两边含环。

-------- 本文结束 感谢阅读 --------