两个链表的第一个公共结点

http://www.nowcoder.com/questionTerminal/6ab1d9a29e88450685099d45c9e31e46

# -*- 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
        def fun(shortPointer, longPointer, shortHead, longHead):
            k = 0
            # 寻找出链表长度之间的差值
            while longPointer:
                longPointer = longPointer.next
                k += 1
            # 先让长的那个走K步
            shortPointer = shortHead
            longPointer = longHead
            for i in range(k):
                longPointer = longPointer.next
            while shortPointer != longPointer:
                shortPointer = shortPointer.next
                longPointer = longPointer.next
            return shortPointer

        pTmp1 = pHead1
        pTmp2 = pHead2
        while pTmp1 and pTmp2:
            # 当两个链表长度一样的时候
            if pTmp1 == pTmp2:
                return pTmp1
            pTmp1 = pTmp1.next
            pTmp2 = pTmp2.next
        if pTmp1:
            return fun(pTmp2, pTmp1, pHead2, pHead1)
        else:
            return fun(pTmp1, pTmp2, pHead1, pHead2)


全部评论

相关推荐

07-31 14:08
门头沟学院 Java
点赞 评论 收藏
分享
天天困啊:个人建议第一点就是熟悉Redis这里不要这么写,写上Redis比较核心的技术,什么缓存一致性,雪崩穿透击穿那些,掌握cos其实不用写在专业技能里这个你做了鱼皮的这个项目面试官默认应该认为你应该懂了,鱼皮这个项目核心挺多建议多啃啃,在做一个鱼皮的微服务项目俩项目在一起比较好哦
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务