380. 兩個鏈表的交叉

描述

請寫一個程序织盼,找到兩個單鏈表最開始的交叉節(jié)點。

注意事項

如果兩個鏈表沒有交叉酱塔,返回null沥邻。
在返回結(jié)果后,兩個鏈表仍須保持原有的結(jié)構(gòu)羊娃。
可假定整個鏈表結(jié)構(gòu)中沒有循環(huán)唐全。

樣例

下列兩個鏈表:

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

在節(jié)點 c1 開始交叉。

挑戰(zhàn)

需滿足 O(n) 時間復(fù)雜度,且僅用 O(1) 內(nèi)存

代碼

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;      
 *     }
 * }
 */


public class Solution {
    /**
     * @param headA: the first list
     * @param headB: the second list
     * @return: a ListNode 
     */
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if (headA == null || headB == null) {
            return null;
        }
        
        // 找到鏈表 A 的尾結(jié)點
        ListNode node = headA;
        while (node.next != null) {
            node = node.next;
        }
        // 鏈表 A 的尾結(jié)點和鏈表 B 的頭結(jié)點連在一起
        node.next = headB;
        ListNode result = listCycleII(headA);
        
        return result;
    }
    
    // 尋找?guī)Лh(huán)鏈表的環(huán)的入口
    private ListNode listCycleII(ListNode head) {
        ListNode slow = head, fast = head.next;
        
        // 先判斷是否存在環(huán)
        while (slow != fast) {
            if (fast == null || fast.next == null) {
                return null;
            }
            
            slow = slow.next;
            fast = fast.next.next;
        }
        
        slow = head;
        // 注意此處 fast 前進一個結(jié)點
        fast = fast.next;
        while (slow != fast) {
            slow = slow.next;
            fast = fast.next;
        }
        
        return slow;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邮利,一起剝皮案震驚了整個濱河市弥雹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌延届,老刑警劉巖剪勿,帶你破解...
    沈念sama閱讀 212,657評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異方庭,居然都是意外死亡厕吉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,662評論 3 385
  • 文/潘曉璐 我一進店門械念,熙熙樓的掌柜王于貴愁眉苦臉地迎上來头朱,“玉大人,你說我怎么就攤上這事龄减∠钆ィ” “怎么了?”我有些...
    開封第一講書人閱讀 158,143評論 0 348
  • 文/不壞的土叔 我叫張陵希停,是天一觀的道長烁巫。 經(jīng)常有香客問我,道長脖苏,這世上最難降的妖魔是什么程拭? 我笑而不...
    開封第一講書人閱讀 56,732評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮棍潘,結(jié)果婚禮上恃鞋,老公的妹妹穿的比我還像新娘。我一直安慰自己亦歉,他們只是感情好恤浪,可當(dāng)我...
    茶點故事閱讀 65,837評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肴楷,像睡著了一般水由。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赛蔫,一...
    開封第一講書人閱讀 50,036評論 1 291
  • 那天砂客,我揣著相機與錄音,去河邊找鬼呵恢。 笑死鞠值,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渗钉。 我是一名探鬼主播彤恶,決...
    沈念sama閱讀 39,126評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了声离?” 一聲冷哼從身側(cè)響起芒炼,我...
    開封第一講書人閱讀 37,868評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎术徊,沒想到半個月后本刽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,315評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡弧关,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,641評論 2 327
  • 正文 我和宋清朗相戀三年盅安,在試婚紗的時候發(fā)現(xiàn)自己被綠了唤锉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片世囊。...
    茶點故事閱讀 38,773評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窿祥,靈堂內(nèi)的尸體忽然破棺而出株憾,到底是詐尸還是另有隱情,我是刑警寧澤晒衩,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布嗤瞎,位于F島的核電站,受9級特大地震影響听系,放射性物質(zhì)發(fā)生泄漏贝奇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一靠胜、第九天 我趴在偏房一處隱蔽的房頂上張望掉瞳。 院中可真熱鬧,春花似錦浪漠、人聲如沸陕习。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,859評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽该镣。三九已至,卻和暖如春响谓,著一層夾襖步出監(jiān)牢的瞬間损合,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工娘纷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嫁审,地道東北人。 一個月前我還...
    沈念sama閱讀 46,584評論 2 362
  • 正文 我出身青樓失驶,卻偏偏與公主長得像土居,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,676評論 2 351

推薦閱讀更多精彩內(nèi)容