Linked List Cycle II

原创 2016年05月31日 14:26:16
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Note: Do not modify the linked list.

Follow up:

Can you solve it without using extra space?

思路:找到一个有环链表的起始节点。定义两个指针,一个指针每次走一步,一个指针每次走两步。这样,当两者相遇的时候说明整个链表含有环。当两者第一次相遇的时候,快指针走的路径是慢指针的两倍。可以得出从第一次相遇的地方到链表环起始节点的距离和从链表head开始到循环起始节点的距离是相等的。这样,再遍历一次链表即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode *slow=head;
        ListNode *fast=head;
        while(true)
        {
            if(fast==NULL || fast->next==NULL)
                return NULL;
            slow=slow->next;
            fast=fast->next->next;
            if(slow==fast)
                break;
        }
        //跳出循环说明有环
        slow=head;
        while(slow!=fast)
        {
            slow=slow->next;
            fast=fast->next;
        }
        return slow;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

(Leetcode 142)Linked List Cycle (II) (快慢指针详解)

Leetcode141题和142题很相似,都涉及到了快慢指针的算法。快慢指针就是设置两个指针,一个快指针,一个慢指针来达到解题的目的。下面分为以下几个模块来讲解: 解第141题解第142题为什么快...
  • willduan1
  • willduan1
  • 2016年03月20日 21:05
  • 8270

leetcode:142. Linked List Cycle II(Java)解答

转载请注明出处:z_zhaojun的博客 原文地址:http://blog.csdn.net/u012975705 题目地址:https://leetcode.com/problems/link...
  • u012975705
  • u012975705
  • 2015年12月27日 16:36
  • 2190

【LeetCode-面试算法经典-Java实现】【142-Linked List Cycle II(单链表中有环II)】

【142-Linked List Cycle II(单链表中有环II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a linked list, retur...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月19日 06:38
  • 3037

[Leetcode-142] Linked List Cycle II(链表有环详细分析)

环的长度是多少? 如何找到环中第一个节点(即Linked List Cycle II)? 如何将有环的链表变成单链表(解除环)? 如何判断两个单链表是否有交点?如何找到第一个相交的节点?...
  • xy010902100449
  • xy010902100449
  • 2015年10月09日 09:33
  • 1403

【LeetCode】141 Linked List Cycle (java实现)

Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without usi...
  • styshoo
  • styshoo
  • 2015年09月02日 23:34
  • 1149

leetcode141: Linked List Cycle

Given a linked list, determine if it has a cycle in it.Follow up: Can you solve it without using ex...
  • u010111016
  • u010111016
  • 2016年05月17日 10:30
  • 1531

LeetCode 141 — Linked List Cycle(C++ Java Python)

题目:http://oj.leetcode.com/problems/linked-list-cycle/ Given a linked list, determine if it has a cyc...
  • dragon_dream
  • dragon_dream
  • 2014年02月27日 21:26
  • 2287

[C语言][LeetCode][142]Linked List Cycle II

[C语言][LeetCode][142]Linked List Cycle II
  • Timsley
  • Timsley
  • 2016年04月14日 21:50
  • 509

Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next...
  • kingoverlord
  • kingoverlord
  • 2014年02月07日 13:02
  • 1184

LeetCode (27) Linked List Cycle (判断cycle存在、寻找cycle入口节点)

判断cycle存在Given a linked list, determine if it has a cycle in it.Follow up: Can you solve it without ...
  • angelazy
  • angelazy
  • 2015年04月28日 14:36
  • 1159
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linked List Cycle II
举报原因:
原因补充:

(最多只允许输入30个字)