【大厂高频算法题】判断链表中是否有环
2023-06-13 09:13:36 时间
【大厂高频算法题】判断链表中是否有环
题目:判断给定的链表中是否有环。如果有环则返回true,否则返回false。 难度:简单
代码:
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode pos = head;
// 哈希表记录访问过的结点
Set<ListNode> set = new HashSet<>();
while (pos != null) {
// 判断结点是否被访问
if (set.contains(pos)) {
return true;
} else {
// 结点记录添加到哈希表中
set.add(pos);
}
// 遍历
pos = pos.next;
}
return false;
}
}
第二种方式:
public class Solution {
public boolean hasCycle(ListNode head) {
//先判断链表为空的情况
if(head == null)
return false;
//快慢双指针
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;
}
}
相关文章
- ☆打卡算法☆LeetCode 203. 移除链表元素 算法解析
- LeetCode19. 删除链表的倒数第 N 个结点
- 每日算法刷题Day13-在O(1)时间删除链表结点、合并两个排序的链表、把字符串转换成整数
- 83. 删除排序链表中的重复元素
- 【力扣刷题】21. 合并两个有序链表
- 无序链表排序_双向链表排序算法
- 常用链表排序算法_单链表的排序算法
- 基本算法:逆转链表
- 【数据结构初阶】直接插入排序和希尔排序&链表排序
- BAT算法面试题(12)--环形链表(哈希表法)
- 【数据结构与算法】链表2W字终极无敌总结
- 【Linux 内核 内存管理】RCU 机制 ③ ( RCU 模式下添加链表项 list_add_rcu 函数 | RCU 模式下删除链表项 list_del_rcu 函数 )
- 算法-复杂链表的复制详解编程语言
- 算法-合并两个排序的链表详解编程语言
- 算法-链表中倒数第k个结点详解编程语言
- 算法练习之x的平方根,爬楼梯,删除排序链表中的重复元素, 合并两个有序数组详解编程语言
- 从Linux构建链表:实现高效数据存储(linux链表)
- Linux中链表使用技巧精解(linux链表用法)
- 秒杀神器Redis链表实现快速处理(redis链表做秒杀)
- 利用Redis缓存实现高效链表算法(redis缓存链表算法)
- C创建链表并将信息存储在二进制文件中读取的实例代码
- 如何用C++实现双向循环链表
- C语言单循环链表的表示与实现实例详解