剑指offer 面试52题

面试52题:面试

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

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

解题思路:blog

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

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

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

 

解题代码:class

# -*- 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
相关文章
相关标签/搜索