劍指Offer(三十六):兩個鏈表的第一個公共結點

劍指Offer(三十六):兩個鏈表的第一個公共結點

搜索微信公衆號:'AI-ming3526'或者'計算機視覺這件小事' 獲取更多算法、機器學習乾貨python

csdn:https://blog.csdn.net/baidu_31657889/git

github:https://github.com/aimi-cn/AILearnersgithub

1、引子

這個系列是我在牛客網上刷《劍指Offer》的刷題筆記,旨在提高下本身的算法能力。
查看完整的劍指Offer算法題解析請點擊CSDN和github連接:
劍指Offer完整習題解析CSDN地址
github地址算法

2、題目

輸入兩個鏈表,找出它們的第一個公共結點。編程

一、思路

若是存在共同節點的話,那麼從該節點,兩個鏈表以後的元素都是相同的。也就是說兩個鏈表從尾部往前到某個點,節點都是同樣的。微信

兩條相交的鏈表呈Y型。能夠從兩條鏈表尾部同時出發,最後一個相同的結點就是鏈表的第一個相同的結點。能夠利用棧來實現。時間複雜度有O(m + n), 空間複雜度爲O(m + n)app

二、編程實現

python機器學習

代碼實現方案:學習

# -*- 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 not pHead1 or not pHead2:
            return None
        
        #定義一個新的棧倒敘存放兩個節點
        stack1 = []
        stack2 = []
        
        while pHead1:
            stack1.append(pHead1)
            pHead1 = pHead1.next
            
        while pHead2:
            stack2.append(pHead2)
            pHead2 = pHead2.next
            
        first = None
        while stack1 and stack2:
            top1 = stack1.pop()
            top2 = stack2.pop()
            if top1 is top2:
                first=top1
            else:
                break
        return first複製代碼

AIMI-CN AI學習交流羣【1015286623】 獲取更多AI資料spa

分享技術,樂享生活:咱們的公衆號計算機視覺這件小事每週推送「AI」系列資訊類文章,歡迎您的關注!

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索