`
gaofen100
  • 浏览: 1228159 次
文章分类
社区版块
存档分类
最新评论

判断一个单链表是否有环,如果有,找出环的起始位置

 
阅读更多

How can one determine whether a singly linked list has a cycle?

第一种方法是从单链表head开始,每遍历一个,就把那个node放在hashset里,走到下一个的时候,把该node放在hashset里查找,如果有相同的,就表示有环,如果走到单链表最后一个node,在hashset里都没有重复的node,就表示没有环。 这种方法需要O(n)的空间和时间。


第二种方法是设置两个指针指向单链表的head, 然后开始遍历,第一个指针走一步,第二个指针走两步,如果没有环,它们会直接走到底,如果有环,这两个指针一定会相遇。


现在找出环的起始位置:

分享到:
评论

相关推荐

    算法大全面试题数据结构单链表的13道面试题含代码

    4. **判断链表是否有环**:这题可以使用Floyd判环法,即设立两个指针,一个快指针每次移动两步,一个慢指针每次移动一步,如果存在环,快指针会追上慢指针。 5. **合并两个有序链表**:将两个已排序的链表合并为一...

    算法大全-面试题-数据结构

    8. 判断单链表是否有环及找到环的起始点: - 使用快慢指针,快指针每次移动两步,慢指针每次移动一步。如果存在环,快指针最终会追上慢指针(相遇点)。从相遇点开始,再用一个指针从头开始移动,当两个指针再次...

    算法大全(数据结构)

    10. 判断单链表是否有环:使用快慢指针,快指针每次移动两步,慢指针每次移动一步。如果存在环,快指针最终会追上慢指针。 11. 找到环的“起始”点:当判断到链表有环后,让快指针回到头节点,慢指针保持在相遇点。...

    算法大全-面试题-链表-栈-二叉树-数据结构

    8. **判断单链表是否有环及环的起始点与长度** 使用Floyd判环算法(龟兔赛跑),两个指针分别以1倍和2倍速度前进,若相遇则存在环。确定环的起始点可让一个指针回到头节点,两者再次以相同速度前进,相遇点即为环...

    数据结构的经典C#代码

    8. **判断单链表是否有环**:可以使用Floyd判环算法,即两个指针,一个快指针每次走两步,慢指针每次走一步,若存在环,两者必会相遇。 9. **找到环的“起始”点**:在找到环后,可以使用快慢指针重新设置,让慢...

    约瑟夫环的实现.doc

    - 找出第一个报数人的位置。 - 输出出列人的编号。 - 更新密码值。 - 删除出列的人。 - 更新报数起始位置。 - **输出结果**:显示每次出列的人的编号。 ### 四、实验结果与分析 由于文档中没有提供具体的实验...

    数据结构和算法编程总结

    - 判断链表是否有环是常见的面试题。可以使用快慢指针的方法,快指针每次移动两步,慢指针每次移动一步。如果存在环,快指针最终会追上慢指针。如上所述,代码实现可以使用一个`while`循环,当快慢指针相遇时,返回...

    链表的19种算法(C语言)

    18. **链表的环的起始节点**:如果链表有环,找到环的起始节点。 19. **单链表的反转K个节点**:每次反转链表中的连续K个节点,保持其他部分不变。 这些算法涵盖了链表操作的基础和进阶技巧,对于学习数据结构和...

    Leetcode答案(c++版)

    - 当快指针到达链表尾部时,慢指针恰好在待删除节点的前一个位置。 - 进行删除操作后返回链表头结点。 **1.3 Merge Two Sorted Lists (21)** - **问题描述**:合并两个排序链表,使合并后的链表是排序的。 - **...

    从算法到数据结构

    - **链表循环**:判断一个链表是否存在环。 - **合并分类链表**:对两个已排序的链表进行合并。 - **发现链表循环**:找到链表中环的起始节点。 - **合并k分类列表**:合并多个已排序的链表。 - **二叉树...

    2011华为上机经典试题

    - 实现思路:可以通过双指针的方式,一个指向数组开头,另一个指向结尾,逐步向中心移动并比较对应位置的元素是否相同来判断。 ### 求两个整型数组的异集 该题考查集合运算的能力,需要理解并实现两个数组的并集和...

    LeetCode算法设计

    2. **Nim的游戏[E]**:Nim游戏是一个两人轮流拿石头的游戏,给出一个石头堆的初始状态,判断先手玩家是否有必胜策略。 #### 九、查表 **查表**通常用于快速查询预计算的结果。 1. **拉丁数字转罗马数字[M]**:将一...

    数据结构习题解析

    - 判断单链表中最后一个结点的方法。 - **解析:** - 在单链表中,最后一个结点的next指针通常被设置为NULL,以此来标识链表的结尾。 - 因此,只要一个结点的next指针为空,那么这个结点就是链表的最后一个结点...

    《数据结构 1800题》

    8. 一个算法具有 5个特性: (1)有穷性 、 (2)确定性 、 (3)可行性 ,有零个或多个输入、有一个或多个输出。 《数据结构 1800题》 9.已知如下程序段 FOR i:= n DOWNTO 1 DO {语句 1} BEGIN x:=x+1;...

    2018西农复试机考模拟题目及答案(1)1

    8. **单字符计数**:在字符串中找到第一个只出现1次的字符,可以创建一个计数数组,与字符数组同步更新,遍历计数数组找出第一个值为1的索引对应的字符。 9. **字符查找**:在一个字符数组中查找指定字符,可以使用...

    考研备考资料真题-2019年贵州大学831计算机考研真题.pdf

    入队操作时需要判断队列是否已满,然后将新元素放入队尾位置,并更新队尾指针。 6. **算法时间复杂度分析**: - **题目描述**:要求找出时间复杂度大于O(log2n)的算法。 - **解析**:常见的时间复杂度包括O(1)、O...

    数据结构代码

    广度优先搜索(BFS)则常用于找出两个节点之间的最短路径、计算图的直径和判断连通性。BFS按照层次顺序进行搜索,每次扩展一层节点,直到找到目标节点。 在VS2010环境下,这些代码可以成功编译和运行,提供了一个...

Global site tag (gtag.js) - Google Analytics