刷到 LeetCode 这个评论,被笑到了!
Posted 程序员小灰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷到 LeetCode 这个评论,被笑到了!相关的知识,希望对你有一定的参考价值。
多写、多练、多思考,持续输出第 5/10 天|执行|专注|坚持
大家好,我是吴师兄。
今天早上我在 LeetCode 第 141 号问题 环形链表 的评论区中发现了一个称得上是天秀的解法,简直太骚气了,忍不住分享给大家。

首先给没有见过这道题目的小伙伴补充一下前置知识, 环形链表这道题目讲的是给你一个链表的头节点 head ,判断链表中是否有环。
所谓链表有环,直观上来看就是这个样子:

严谨一些的说明指的是如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。
一般正经解法是使用快慢指针的思路,即在开头设置两个指针,一个跑的快,一个跑的慢,如果两个指针再次重新相遇,那么就说明有环。
这个思路挺好理解的,在一个环形操场上,跑的快的人总是能和跑的慢的人再次相遇。
但是这个评论区的小伙伴面向测试用例编程,给出了如下的代码:
public class Solution
public boolean hasCycle(ListNode head)
int count = 8029;
while( head != null && count > 0)
head = head.next;
count--;
if( head == null ) return false;
return true;
上述代码的含义是从链表的头节点,沿着链表不断地向后移动,移动 8029 次后,如果此时指向的是空,说明链表是一条直线不存在环,反之存在环。
很合理的思路!
如果一个链表的长度小于 8029,当它没有环时,不需要移动 8029 次就会来到尾部指向 null;当它存在环时,那么会在这个环中绕圈圈,最终移动 8029 次后指向一个存在值的节点。
提交一下代码,报错!

点击查看全部,发现最后一个测试用例链表的长度扩充到了 10000 。

简单的修改一下代码,将 count = 8029
修改为 count = 10001
,再次提交。

牛逼,击败 100% !
LeetCode 评论区的人才可真多!
以上是关于刷到 LeetCode 这个评论,被笑到了!的主要内容,如果未能解决你的问题,请参考以下文章