分析:如果兩個單向鏈表有公共的結點,也就是說兩個鏈表從某一結點開始,它們的m_pNext都指向同一個結點。但由於是單向鏈表的結點,每個結點只有一個m_pNext,因此從第一個公共結點開始,之后它們所有結點都是重合的,不可能再出現分叉。所以,兩個有公共結點而部分重合的鏈表,拓撲形狀看起來像一個Y ...
引言 其實這道題目早在劍指Offer上就已經出現過,參見以前的這篇文章,但后來July前輩也有一片文章講過類似問題,對比之下,之前的解法還不夠全面,沒有考慮到所有情況,這篇文章把這道題目作一個梳理。 題目總結起來是這樣: 輸入兩個鏈表,判斷它們是否有公共節點,返回bool。 引申:找出它們的第一個公共節點的指針,如果沒有公共節點則返回NULL。 鏈表的定義如下: 輸出函數: 首先需要考慮空指針輸入 ...
2014-07-03 11:03 0 7805 推薦指數:
分析:如果兩個單向鏈表有公共的結點,也就是說兩個鏈表從某一結點開始,它們的m_pNext都指向同一個結點。但由於是單向鏈表的結點,每個結點只有一個m_pNext,因此從第一個公共結點開始,之后它們所有結點都是重合的,不可能再出現分叉。所以,兩個有公共結點而部分重合的鏈表,拓撲形狀看起來像一個Y ...
題目描述 輸入兩個鏈表,找出它們的第一個公共結點。 題目分析 我發現關於鏈表的題都涉及雙指針,大家做的時候記得用雙指針。 題目理解了就很好做了,比較簡單,先在長的鏈表上跑,直到長的和短的一樣長,再一起跑,判斷節點相等的時候就可以了。 代碼 ...
題目: 解答: 方法一:雙指針法 (1)創建兩個指針 pA 和 pB,分別初始化為鏈表 A 和 B 的頭結點。然后讓它們向后逐結點遍歷。 (2)當 pA到達鏈表的尾部時,將它重定位到鏈表 B 的頭結點 (你沒看錯,就是鏈表 B); 類似的,當 pB 到達鏈表 ...
一、題目:兩個鏈表的第一個公共節點 題目:輸入兩個鏈表,找出它們的第一個公共結點。 鏈表結點定義如下,這里使用C#語言描述: 二、解題思路 2.1 蠻力法 碰到這道題,很多人的第一反應就是蠻力法:在第一鏈表上順序遍歷每個結點,每遍歷到一個結點 ...
前言 本篇是對二叉樹系列中求最低公共祖先類題目的討論。 題目 對於給定二叉樹,輸入兩個樹節點,求它們的最低公共祖先。 思考:這其實並不單單是一道題目,解題的過程中,要先弄清楚這棵二叉樹有沒有一些特殊的性質,這些特殊性質可以便於我們使用最優的方式解題。 傳統二叉樹的遍歷 ...
62.找出鏈表的第一個公共結點。題目:兩個單向鏈表,找出它們的第一個公共結點 思路: 1.暴力法 但時間復雜度太高 o(n*m) 2.如果兩個鏈表有公共節點,則從該公共節點起,后面的節點均為公共的,即這兩個鏈表在第一個公共節點交叉,然后形成一個Y字型,因為兩個鏈表長度不一定一樣 ...
引言 這個問題一種常想到的方法就是兩層循環遍歷,外層循環遍歷鏈表A,對A中每個節點,遍歷鏈表B,如果在B中找到,說明這個節點是第一個公共節點,但是這樣的方法時間復雜為mn,一般是不允采用的 分析問題 所以我們需要分析更深層次的問題,找到其中的規律 ...
求鏈表的倒數第K個節點:主要思路設置兩個指針,剛開始都指向鏈表的第一個節點,第一個指針先走k-1步,然后兩個一塊走,直到第一個指針的下一位為nullptr,則第二個指針所指的位置就是倒數第k個節點。 在編程書上看見這個方法,自己畫了個鏈表試了試果然是這樣,但是這是個什么原理 ...