【劍指 offer】兩個鏈表的第一個公共結(jié)點

1籽御、題目描述

輸入兩個鏈表枚尼,找出它們的第一個公共結(jié)點留搔。

當(dāng)不存在公共節(jié)點時更胖,返回空節(jié)點。

樣例

給出兩個鏈表如下所示:
A: ? a1 → a2
? ? ? ? ? ? ↘
? ? ? ? ? ? ? c1 → c2 → c3
? ? ? ? ? ? ↗
B: b1 → b2 → b3

輸出第一個公共節(jié)點c1

2隔显、問題描述:

3却妨、問題關(guān)鍵:

  • 如果有公共結(jié)點肯定是在后面重疊,且后面部分都是共同的括眠。
  • 方法1:先計算出兩個鏈表的長度彪标,可以讓比較長的先走兩個鏈表長度之差的步數(shù),兩個再一起走掷豺。
  • 方法2:不同部分為a捞烟, 和b薄声,公共部分為c;a + c + b = b + c + a;讓兩個一起走题画,a走到頭就轉(zhuǎn)向b默辨, b走到頭轉(zhuǎn)向a,則在公共部分相遇婴程。

4廓奕、C++代碼:

方法1:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
        auto p = headA, q = headB;
        int la = 0, lb = 0;
        for (auto t = headA; t; t = t->next) la ++;
        for (auto t = headB; t; t = t->next) lb ++;
        int k = la - lb;
        if (la < lb) {
            p = headB, q = headA;
            k = lb - la;
        }
        while(k --) {
            p = p->next;
        }
        while(p) {
            if (p == q) return p;
            p = p->next;
            q = q->next;
        }
        return nullptr;
    }
};
方法2:
class Solution {
public:
    ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
        auto p = headA, q = headB;
        while(p != q) {
            if(p) p = p->next;
            else p = headB;
            if (q) q = q->next;
            else q = headA;
        }
        return p;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抱婉,一起剝皮案震驚了整個濱河市档叔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒸绩,老刑警劉巖衙四,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異患亿,居然都是意外死亡传蹈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門步藕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惦界,“玉大人,你說我怎么就攤上這事咙冗≌赐幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵雾消,是天一觀的道長灾搏。 經(jīng)常有香客問我,道長立润,這世上最難降的妖魔是什么狂窑? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮桑腮,結(jié)果婚禮上泉哈,老公的妹妹穿的比我還像新娘。我一直安慰自己破讨,他們只是感情好丛晦,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著添忘,像睡著了一般采呐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上搁骑,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天斧吐,我揣著相機與錄音又固,去河邊找鬼。 笑死煤率,一個胖子當(dāng)著我的面吹牛仰冠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝶糯,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洋只,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昼捍?” 一聲冷哼從身側(cè)響起识虚,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妒茬,沒想到半個月后担锤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡乍钻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年肛循,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片银择。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡多糠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浩考,到底是詐尸還是另有隱情夹孔,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布怀挠,位于F島的核電站析蝴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏绿淋。R本人自食惡果不足惜闷畸,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吞滞。 院中可真熱鬧佑菩,春花似錦、人聲如沸裁赠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佩捞。三九已至绞幌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間一忱,已是汗流浹背莲蜘。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工谭确, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人票渠。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓逐哈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親问顷。 傳聞我的和親對象是個殘疾皇子昂秃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 描述: 輸入兩個鏈表,找出它們的第一個公共結(jié)點杜窄;注:鏈表為單鏈表 法一: 分析: 使用雙重循環(huán)肠骆,依次遍歷pHead...
    要記錄的Ivan閱讀 218評論 0 0
  • 本文首發(fā)于我的個人博客:尾尾部落 題目描述 輸入兩個鏈表,找出它們的第一個公共結(jié)點羞芍。 解題思路 如果兩個鏈表存在公...
    繁著閱讀 205評論 0 0
  • 題目描述 [兩個鏈表的第一個公共結(jié)點] 輸入兩個鏈表哗戈,找出它們的第一個公共結(jié)點。 解題思路 先把長的鏈表的頭砍掉荷科,...
    一只可愛的檸檬樹閱讀 94評論 0 1
  • 今天,注冊了簡書纱注,不為了別的畏浆,只為了和大家分享ios、以及移動開發(fā)的各種秘籍和技巧狞贱,順便也是給自己一個監(jiān)督和記錄刻获,...
    __CodeR閱讀 247評論 0 0
  • 今早將“期待停雨”,打成“期待聽雨”瞎嬉,就去洗漱了蝎毡,等再看朋友的留言,我不禁和朋友一樣的都笑了氧枣,心想沐兵,也許“聽雨”會...
    小豬快跑0521閱讀 222評論 0 0