美文网首页
剑指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