0
点赞
收藏
分享

微信扫一扫

使用快慢指针求解「环形链表」so easy!


使用快慢指针求解「环形链表」so easy!_快慢指针


今天分享的题目来源于 LeetCode 上第 141 号问题:环形链表。题目难度为 Easy,目前通过率为 40.4% 。

使用快慢指针的方式去求解 so easy

题目描述

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 ​​pos​​ 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 ​​pos​​ 是 ​​-1​​,则在该链表中没有环。

示例 1:

输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1输出:false解释:链表中没有环。false
解释:链表中没有环。

进阶:

你能用 O(1)(即,常量)内存解决此问题吗?

题目解析

这道题是快慢指针的经典应用

设置两个指针,一个每次走一步的慢指针和一个每次走两步的快指针

动画描述

使用快慢指针求解「环形链表」so easy!_题目解析_02

代码实现

//author:程序员小吴public class Solution {    public boolean hasCycle(ListNode head) {        ListNode slow = head, fast = head;        while (fast != null && fast.next != null) {            slow = slow.next;            fast = fast.next.next;            if (slow == fast) return true;        }        return false;    }}
public class Solution{
public boolean hasCycle(ListNode head){
ListNode slow = head, fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
if (slow == fast) return true;
}
return false;
}
}

END

使用快慢指针求解「环形链表」so easy!_链表_03



使用快慢指针求解「环形链表」so easy!_链表_04





举报

相关推荐

0 条评论