java 实现环形链表_数据结构环形链表(java实现)

解法1:快慢指针

/**

* 思路:

* 快慢指针

* 只要慢指针被追上就说明有循环

*/

public static boolean hasCycle(ListNode head) {

if (head==null)return false;

ListNode fast=head;

ListNode slow=head;

while (fast.next!=null&&fast.next.next!=null) {

fast = fast.next.next;

slow = slow.next;

if (slow==fast)return true;

}

return false;

}

时间复杂度:On

空间复杂度:O1

880516b9c8e6cd481c596d06b787d359.png

解法2:hashSet

/**

* 思路:

* 暴力法,遍历链表

* 把链表放入set集合中,一旦有重复就能用方法判断出来

*/

public static boolean hasCycle(ListNode head) {

HashSet set = new HashSet<>();

while (head!=null){

if (set.contains(head))return true;

set.add(head);

head=head.next;

}

return false;

}

时间复杂度:On

空间复杂度:On

5aeca61066f7138c7c599368e8f7d65a.png

本文地址:https://blog.csdn.net/qq_38783664/article/details/110240219

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值