leetcode 141. 环形链表(快慢指针解法)

题目

在这里插入图片描述

思路

绝对的经典题目,快慢指针,慢指针一次走两步,快指针一次走一步,直到两指针相遇,则说明有环。

关于评论区看到的一种思路,本质是做标记。这个办法不是很好,一方面,如果测试用例足够全的话,标记内容有可能与val重复,另一方面:
面试的时候我说过这个思路,结果面试官问我:那你遍历之后,原来的数据还能用吗?哎,惨。。
在这里插入图片描述

题解

这大概是写的最快的一道题了,三分钟写出来的

//  Definition for singly-linked list.
class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
        next = null;
    }
}

class Solution {
    public static void main(String[] args) {
        // 测试用例
        Solution solution = new Solution();
        ListNode node = new ListNode(1);
        System.out.println(solution.hasCycle(node));
    }

    public boolean hasCycle(ListNode head) {
        ListNode singleStep = head;
        ListNode multiStep = head;
        while (multiStep != null && multiStep.next != null) {
            singleStep = singleStep.next;
            multiStep = multiStep.next.next;
            if (singleStep == multiStep) return true;
        }
        return false;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/107389306