1. 程式人生 > >LintCode(103)帶環連結串列 II

LintCode(103)帶環連結串列 II

題目

給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點的值,如果沒有環,返回null。

您在真實的面試中是否遇到過這個題?  Yes 樣例

給出 -21->10->4->5, tail connects to node index 1,返回10

分析

上一題的進階。 首先,利用快慢指標判斷有無環,若遇到slow == fast時,跳出迴圈; 然後,調整fast=head,slow不變,此時slow與fast同步移動,直至再次相遇,即是連結串列中環的起始節點。

Python程式碼

"""
Definition of ListNode
class ListNode(object):

    def __init__(self, val, next=None):
        self.val = val
        self.next = next
"""
class Solution:
    """
    @param head: The first node of the linked list.
    @return: The node where the cycle begins. 
                if there is no cycle, return null
    """
    def detectCycle(self, head):
        # write your code here
        if head == None or head.next == None:
            return None
            
        slow = head
        fast = head
        
        while fast != None and fast.next != None:
            slow = slow.next
            fast = fast.next.next
            if slow == fast:
                break
            
        if fast != None and fast == slow:
            fast = head
            while fast != slow:
                slow = slow.next
                fast = fast.next
            return fast
        
        return None
GitHub -- Python程式碼

C++程式碼

/**
103 帶環連結串列 II

給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點的值,如果沒有環,返回null。

您在真實的面試中是否遇到過這個題? Yes
樣例
給出 -21->10->4->5, tail connects to node index 1,返回10

*/

/**
 * Definition of ListNode
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param head: The first node of linked list.
     * @return: The node where the cycle begins. 
     *           if there is no cycle, return null
     */
    ListNode *detectCycle(ListNode *head) {
        // write your code here
        if(head == NULL || head->next ==NULL)
        {
            return NULL;
        }//if
        
        ListNode *slow = head, *fast = head;
        while(fast && fast->next)
        {
            slow = slow->next;
            fast = fast->next->next;
            if(slow == fast)
            {
                break;
            }//if
        }//while
        
        if(fast && fast == slow)
        {
            fast = head;
            while(fast != slow)
            {
                fast = fast->next;
                slow = slow->next;
            }//while
            
            return fast;
        }//if
        return NULL;
        
    }
};


GitHub -- C++程式碼

相關推薦

LintCode103連結串列 II

題目 給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點的值,如果沒有環,返回null。 您在真實的面試中是否遇到過這個題?  Yes 樣例 給出 -21-&

LintCode102 連結串列

題目 給定一個連結串列,判斷它是否有環。 您在真實的面試中是否遇到過這個題?  Yes 樣例 給出 -21->10->4->5, tail connects t

lintcode練習-103. 連結串列 II

103. 帶環連結串列 II 給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點,如果沒有環,返回null。 樣例 給出 -21->10->4->5, tai

[LintCode] 連結串列 II Linked List Cycle II

給定一個連結串列,如果連結串列中存在環,則返回到連結串列中環的起始節點的值,如果沒有環,返回null。 樣例 給出 -21->10->4->5, tail connects to node index 1,返回10 挑戰 不使用額外的空

LintCode: 連結串列 + 連結串列 II

1. 帶環連結串列描述給定一個連結串列,判斷它是否有環。樣例給出 -21->10->4->5, tail connects to node index 1,返回 true挑戰不要使用額外的空間思路: 可以先看上面這個圖,a 是 起點,b 是 環的起點,b到d

[LintCode] Linked List Cycle連結串列

描述 給定一個連結串列,判斷它是否有環。 樣例 給出 -21->10->4->5, tail connects to node index 1,返回 true。 這裡解釋下,題目的意思,在英文原題中,tail connects

C 資料結構迴圈連結串列連結串列基本操作

經典迴圈連結串列之約瑟夫問題:標號從1到n的n個人圍成一個圈,從1開始計數到m的人退出圈子,然後從退出的下一個人開始接著從1計數,數到m的人後繼續退出,最後只剩下一個人,求剩下人的編號。這便是約瑟夫問題的模型。 經典迴圈連結串列之魔術師發牌問題:魔術師手中有A、2、3……J

lintcode連結串列

/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = va

LintCode:M-連結串列

給定一個連結串列,判斷它是否有環。 您在真實的面試中是否遇到過這個題?  Yes 樣例 給出 -21->10->4->5, tail connects to node index 1,返回 true /** * Def

連結串列-LintCode

給定一個連結串列,判斷它是否有環。 思想: 設定兩個指標(fast, slow),初始值都指向頭,slow每次前進一步,fast每次前進二步,如果連結串列存在環,則fast必定先進入環,而slow後

lintcode-連結串列-102

給定一個連結串列,判斷它是否有環。 樣例 給出 -21->10->4->5, tail connects to node index 1,返回 true 挑戰

c實現功能13實現單向連結串列的簡要功能

#include <stdio.h> #include <stdlib.h> //利用結構體建立節點 struct list{ //建立資料域 int data; //建立指標域 struct list *next; }; //實現建立一個

資料結構-----------線性表下篇之雙向連結串列

//----------雙向連結串列的儲存結構------------ typedef struct DuLNode { ElemType date; struct DoLNode *prior; struct DoLNode *next; } DoLNode,*DoLinkList;

劍指offer——10兩個連結串列的第一個公共結點

圖解:  程式碼:  public class Solution { /* 遍歷兩條連結串列得到各自的長度,長的先next兩條連結串列的長度差,然 後一起走next,如果有公共結點,此結點及之後的連結串列值都相同。 */ publi

領釦LeetCode迴文連結串列 個人題解

請判斷一個連結串列是否為迴文連結串列。 示例 1: 輸入: 1->2 輸出: false 示例 2: 輸入: 1->2->2->1 輸出: true 進階:你能否用 O(n) 時間複雜度和 O(1) 空間複雜度解決此題?   一個最暴力的做法,遍歷一

資料結構與演算法筆記反轉部分連結串列

反轉部分連結串列 上次我們搞定了反轉單向連結串列和雙向連結串列的問題,但實際過程中我們可能只要反轉部分連結串列,在這種情況下我們需要對上次寫出的類增加一個叫做reverse_part_linklist的函式,傳入引數為兩個整數from和to,將from到to之間的節點進行反轉

劍指offer系列16:反轉連結串列

題目描述 輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。 樣例 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL 思路分析 雙指標法,pre指

javascript資料結構與演算法筆記:雙向連結串列

javascript資料結構與演算法筆記(六):雙向連結串列 一:簡介 二:ES6版DoublyLinkedList類 一:簡介 雙向連結串列和普通連結串列的區別在於,在連結串列中,一個節點只有鏈向下一個節點的連結,而

Leetcode題解中級篇之陣列和字串8奇偶連結串列

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/31/linked-list/83/ 題目描述: 奇偶連結串列 給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意

C語言版連結串列——實現單向連結串列建立、插入、刪除等簡單操作包含個人理解說明及註釋,新手跟著寫程式碼

我學習了幾天資料結構,今天下午自己寫了一個單向連結串列的程式。我也是新手,所以剛開始學習資料結構的菜鳥們(有大牛們能屈尊看一看,也是我的榮幸)可以和我一起共同學習、討論,當然也很高興能指出我的錯誤,因為這是我們一起成長的過程。本程式碼包含我在寫程式時的一些個人理解的說