[算法学习] 环形链表

RoLingG 算法 2024-04-08

每日算法 环形链表

例题:141. 环形链表

题目描述:

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false

代码:

public class Solution {
    public boolean hasCycle(ListNode head) {
        // 快慢指针初始化指向 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;
    }
}

思路:

其实这道题很简单,就是双指针看让一个跑得快一个跑得慢,如果那个跑得快的能够套圈追上慢的(也就是 slow == fast)则代表这个链表有环。

PREV
[算法学习] 只出现一次的数字
NEXT
[算法学习] 二叉树的前序遍历

评论(0)

发布评论