美文网首页
剑指Offer-第一个公共节点

剑指Offer-第一个公共节点

作者: lazydecoder | 来源:发表于2019-04-09 17:04 被阅读0次

    输入两个链表,找出它们的第一个公共结点。
    基本思路:
    两个链表若有相同的节点,则相同节点后的所有节点都相同,所以两个链表一定是
    "Y"型的,而不可能是"X" 型的。因此如果两个链表的最后一个几点不同,则一定不会有重合的部分。
    假设一个链表比另一个长k个节点,则长链表的前k个节点一定不会有我们想要的节点,所以先将长链表的指针指向k+1个节点,短链表指针指向第一个节点,同步遍历,若遇到相同的节点,则后面所有节点对应相同。

    # -*- 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 pHead1 == None or pHead2 == None :
                return None
            len1 ,len2 = 0,0
            p1,p2 = pHead1,pHead2
            while p1 != None:
                len1 += 1
                p1 = p1.next
            while p2 != None:
                len2 += 1
                p2 = p2.next
            if p1 != p2:
                return None
            if len1 > len2:
                longlist ,shortlist = pHead1,pHead2
            else :
                longlist,shortlist = pHead2,pHead1
            for i in range(abs(len1-len2)):
                longlist = longlist.next
            while longlist!=shortlist:
                longlist,shortlist = longlist.next,shortlist.next
            return longlist
    

    相关文章

      网友评论

          本文标题:剑指Offer-第一个公共节点

          本文链接:https://www.haomeiwen.com/subject/azhiiqtx.html