劍指Offer-第一個(gè)公共節(jié)點(diǎn)

輸入兩個(gè)鏈表,找出它們的第一個(gè)公共結(jié)點(diǎn)。
基本思路:
兩個(gè)鏈表若有相同的節(jié)點(diǎn),則相同節(jié)點(diǎn)后的所有節(jié)點(diǎn)都相同,所以兩個(gè)鏈表一定是
"Y"型的,而不可能是"X" 型的。因此如果兩個(gè)鏈表的最后一個(gè)幾點(diǎn)不同,則一定不會(huì)有重合的部分。
假設(shè)一個(gè)鏈表比另一個(gè)長(zhǎng)k個(gè)節(jié)點(diǎn),則長(zhǎng)鏈表的前k個(gè)節(jié)點(diǎn)一定不會(huì)有我們想要的節(jié)點(diǎn),所以先將長(zhǎng)鏈表的指針指向k+1個(gè)節(jié)點(diǎn),短鏈表指針指向第一個(gè)節(jié)點(diǎn),同步遍歷,若遇到相同的節(jié)點(diǎn),則后面所有節(jié)點(diǎn)對(duì)應(yīng)相同。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        # write code here
        if pHead1 == None or pHead2 == None :
            return None
        len1 ,len2 = 0,0
        p1,p2 = pHead1,pHead2
        while p1 != None:
            len1 += 1
            p1 = p1.next
        while p2 != None:
            len2 += 1
            p2 = p2.next
        if p1 != p2:
            return None
        if len1 > len2:
            longlist ,shortlist = pHead1,pHead2
        else :
            longlist,shortlist = pHead2,pHead1
        for i in range(abs(len1-len2)):
            longlist = longlist.next
        while longlist!=shortlist:
            longlist,shortlist = longlist.next,shortlist.next
        return longlist
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容