• 剑指offer——python【第36题】两个链表的第一个公共结点


    题目描述

    输入两个链表,找出它们的第一个公共结点

    思路

    注意,这里的公告结点的意思是相同的点,不仅值相同,next也相同,那么同理公共结点后面的点也是不仅值相同,而且next也相同,这样的话,就可以把两条链条看成Y字型了,某一个结点后面的点全部一样。举例,1->2->3->4->6和2->3->5->4->6,4就是他们的第一个公共结点。

    那怎么求呢,有两种思路。

    第一种就是把全部结点分别压入两个栈,利用栈的特性LIFO,然后同时pop出栈,一开始两边的元素肯定是相同的,当遇到不同的元素时,肯定已经遇到了最后一个节点,那就break

    第二种就是分别从链表的头结点开始遍历,当两条链表有长度差时,先让长链表走他们的差值,当走到还剩下和短链表一样长时,两个链表同时遍历,这样就能找到第一个公共结点了

    解答

    第一种方法

    class Solution:
        def FindFirstCommonNode(self, pHead1, pHead2):
            stack1 = []
            stack2 = []
            while pHead1:
                stack1.append(pHead1)
                pHead1 = pHead1.next
            while pHead2:
                stack2.append(pHead2)
                pHead2 = pHead2.next
            node1 = None
            while stack1 and stack2 and stack1[-1] is stack2[-1]:
                node1 = stack1.pop()
                stack2.pop()
            return node1
    人生苦短,何不用python
  • 相关阅读:
    iframe嵌套网页
    text-shadow用法
    响应式布局
    JavaScript控制显示与隐藏
    JavaScript数据类型
    JavaScript基础
    自适应网页设计/响应式Web设计
    不是人家太装逼,而是我们太low
    HTML空格的特性
    如何在Crystal Report中加入Html Field, Rtf Field
  • 原文地址:https://www.cnblogs.com/yqpy/p/9551004.html
Copyright © 2020-2023  润新知