面试算法章-链表:万能的双指针套路

本文介绍了如何使用双指针法解决链表问题,包括判断链表是否有环、找到环的入口以及寻找链表中位节点。通过不同速度的两个指针,可以在特定条件下找到链表的关键信息。提供了思路分析及Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双指针

双指针是应用于链表的一种常见套路,这个套路上课是不会教的。

何为双指针?两个指针都指向链表头,一个指针pointer1一次走一步,另一个指针pointer2一次走两步,这就叫双指针。

 

这个可能听起来很简单,甚至有点懵逼:这玩意有什么用?且听我慢慢道来。

面试题1:判断链表是否有环

如图,这就是一个带环的链表,即2->0->-4会无限循环

那么如何判断一个链表是否有环?

思路

这篇文章讲的是双指针,那当然是利用双指针啦!

你试想一下,在一个环形跑道上,两个人以不同速度出发跑无数圈,那么除了起点以外,是不是两人会在某处相遇?

判断链表是否有环也是一样的,两个指针(两个速度不同的人)分别以1步、2步的速度前进,如果有环,两者必将在某次前进后相等(两人相遇)。

不同速的人终会在环内相遇

Java代码

    boolean ifHasCycle(LinkedList list) {
        // 两个指针指向链表头部
        LinkedListNode pointer1 = list.head;
        LinkedListNode pointer2 = list.head;
        // 双指针开始跑步!
        while (pointer1 != null && pointer2 != null) {
            // 前进1步
            pointer1 = pointer1.next;
            // 前进2步
            point
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值