zoukankan      html  css  js  c++  java
  • 剑指offer 面试52题

    面试52题:

    题目:两个链表的第一个公共节点

    题:输入两个链表,找出它们的第一个公共节点。

    解题思路:

    ①蛮力法:在第一个链表上顺序遍历每个节点,每遍历到一个节点,就在第二个链表上顺序遍历每个节点,直到找到第二个链表上有节点和第一个链表上的节点一样停止。(O(mn))

    ②如果从两个链表的尾部开始往前比较(后进先出),那么最后一个相同节点就是我们要找的节点,为此可以借助两个栈,栈顶元素都一样则pop出去,知道找到最后一个相同的元素为止。(时间复杂度O(m+n),且需要额外辅助空间)

    ③首先遍历两个链表得到它们的长度,如果m>n,则m链表先走m-n步,然后两个链表再同时走,直到找到第一个相同的节点(即为它们的第一个公共节点)。(推荐,时间复杂度O(m+n),且不需要额外辅助空间)

    解题代码:

    # -*- coding:utf-8 -*-
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    class Solution:
        def FindFirstCommonNode(self, pHead1, pHead2):
            length1=self.GetLength(pHead1)
            length2=self.GetLength(pHead2)
            
            if length1>length2:
                headLong=pHead1
                headShort=pHead2
            else:
                headLong=pHead2
                headShort=pHead1
            diff=abs(length1-length2)
            
            for i in range(diff):
                headLong=headLong.next
            
            while headLong!=None and headShort!=None and headLong!=headShort:
                headLong=headLong.next
                headShort=headShort.next
            return headLong
               
    
        
        def GetLength(self,pHead):
            length=0
            while pHead:
                pHead=pHead.next
                length += 1
            return length
  • 相关阅读:
    初识AOP与动态代理
    Java读取打印机自定义纸张.
    通过邮箱发送html报表
    Java 代码质量
    JAVA学习笔记--匿名内部类
    JAVA学习笔记--简介几个常见关键字static、final、this、super
    JAVA学习笔记--迭代器
    JAVA学习笔记--初识容器类库
    JAVA学习笔记--策略设计模式与适配器模式
    JAVA学习笔记--接口
  • 原文地址:https://www.cnblogs.com/yanmk/p/9231287.html
Copyright © 2011-2022 走看看