博客
关于我
Leedcode9-linked-list-cycle-i
阅读量:792 次
发布时间:2023-01-30

本文共 583 字,大约阅读时间需要 1 分钟。

判断链表是否为循环链表的一个经典方法是使用快慢指针算法。快指针每次移动两步,慢指针每次移动一步。如果两个指针在某次移动后相遇,说明链表存在循环。

代码优化

判断链表是否是循环链表,可以使用快慢指针的方法。快指针每次移动两步,慢指针每次移动一步。如果两者相遇或快指针的下一个节点指向慢指针的当前位置,则链表是循环的。

实现代码分析:1. **头节点为空**:如果链表的头节点为空,返回false,因为没有节点无法形成循环。2. **初始化指针**:使用两个指针`fast_ptr`和`slow_ptr`,初始都指向链表的头节点。3. **循环条件**:进入循环的条件是`fast_ptr`的下一个节点和其后一个节点都不为空。这确保了`fast_ptr`有足够的空间移动两步,避免了指针空的情况。4. **移动指针**: - `slow_ptr`移动一步。 - `fast_ptr`移动两步。 5. **检查相遇**:如果两次移动后,`fast_ptr`与`slow_ptr`相遇,说明链表存在循环,返回true。6. **终止条件**:当`fast_ptr`的下一个节点为空时,链表必定不循环,返回false。### 结论通过上述方法,只需要O(1)的额外空间和O(n)的时间复杂度即可判断链表是否存在循环。这个方法高效且占用内存最少,适用于所有情况。

转载地址:http://yxgyk.baihongyu.com/

你可能感兴趣的文章
leetCode 字符串反转
查看>>
LeetCode 无重复字符的最长子串 获取字符串中不重复的子串最大长度
查看>>
LeetCode 热题 HOT 100 (java算法)实时更新 未完
查看>>
leetCode 给定数组,目标值 计算数组下标
查看>>
leetcode 验证回文字符串 java实现
查看>>
LeetCode(229):Majority Element ||
查看>>
leetcode--
查看>>
LeetCode--020--括号匹配
查看>>
leetcode-28-Implement strStr()
查看>>
leetcode-350-Intersection of Two Arrays II(求两个数组的交集)
查看>>
Leetcode-966 Vowel Spellchecker(元音拼写检查器)
查看>>
Leetcode-991 Broken Calculator(坏了的计算器)
查看>>
LeetCode-Binary Tree Maximum Path Sum
查看>>
LeetCode.两数之和&三数之和&最接近的三数之和&四数之和
查看>>
LeetCode110.平衡二叉树
查看>>
LeetCode111.二叉树最小深度
查看>>
LeetCode114.二叉树展开为链表[后序遍历典例]
查看>>
LeetCode136.只出现一次的数字[异或运算典例]
查看>>
LeetCode13:罗马数字转整数
查看>>
Leetcode160 两个链表是否相交
查看>>