剑指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 发布!

相关文章
相关标签/搜索