题目描述
判断给定的链表中是否有环。如果有环则返回true,否则返回false。
以下是本篇文章正文内容,下面案例可供参考
解题思路
- 定义快慢结点(
fast
、slow
),一个往后跑一步,一个往后跑两步 - 当两个相遇时,说明链表有环,若无环,则不可能相遇
- 循环条件为
fast!=null&&fast.next!=null
代码如下
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast != null&&fast.next != null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
}
总结
思考
若
fast
走三步或者四步可以吗?和走两步有什么区别?
可以实现代码,但是fast和slow差的太多,相遇的机会就变少了,自然没有走两步时来的快!
如果本文对你有所帮助,要记得点赞评论哦~
若是有描述不准确的地方,欢迎大家评论区指正,一起学习~