1. 程式人生 > >【LeetCode】142. 環形連結串列 II

【LeetCode】142. 環形連結串列 II

題目描述

給定一個連結串列,返回連結串列開始入環的第一個節點。 如果連結串列無環,則返回 null。

說明:不允許修改給定的連結串列。

進階
你能否不使用額外空間解決此題?

解決方法

在141. 環形連結串列的基礎上改進,重樣採取雙指標,出現重複之後,慢指標返回到頭結點,快指標繼續,兩者每次都走一步,直到相遇,相遇的地方就是環的第一個節點了

/**
 * 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) { //在141. 環形連結串列的基礎上改進,重樣採取雙指標,出現重複之後, //慢指標返回到頭結點,快指標繼續,兩者每次都走一步,直到相遇,相遇的地方就是環的第一個節點了 ListNode *slow=head, *fast=head; while(fast && fast->next){ slow=slow->next; fast=
fast->next->next; if (slow==fast){ //有環,找到第一個節點 slow=head; while(fast!=slow){ slow=slow->next; fast=fast->next; } return fast; } } return NULL; }
};