码迷,mamicode.com
首页 > 其他好文 > 详细

《剑指offer》--- 两个链表的第一个公共结点

时间:2018-06-21 13:41:32      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:节点   first   lse   sel   nod   common   node   center   技术   

本文算法使用python3实现


1. 问题

??输入两个链表,找出它们的第一个公共结点。
??时间限制:1s;空间限制:32768K


2 思路描述

??使用两个指针 $ p1,p2 $ 分别指向两个链表的第一个节点 $ pHead1, pHead2 $ 。将分为以下几种情况:
??(1)当两个链表长度相等,且有公共节点时,两个指针同时后移,会找到第一个公共节点。当 $ p1=p2 $ 时退出。


技术分享图片

??(2)当两个链表长度相等,且没有公共节点时,两个指针同时后移,直到两个指针都指向 None 退出。


技术分享图片

??(3)当两个链表长度不等,且有公共节点时,两个指针同时后移,当 $ p1 $ 指向 None 后,将其重新指向第二个链表的第一个节点 $ p1=pHead2 $ 。当 $ p2 $ 指向 None 后,将其重新指向第一个链表的第一个节点 $ p2=pHead1 $ 。当 $ p1=p2 $ 时退出。


技术分享图片

??(4)当两个链表长度不等,且没有公共节点时,两个指针同时后移,当 $ p1 $ 指向 None 后,将其重新指向第二个链表的第一个节点 $ p1=pHead2 $ 。当 $ p2 $ 指向 None 后,将其重新指向第一个链表的第一个节点 $ p2=pHead1 $ 。当 $ p1=p2=None $ 时退出。


技术分享图片


3 程序代码:

class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        if not pHead1 or not pHead2:  
            return None  
        p1, p2 = pHead1, pHead2  
        while p1 != p2:  
            p1 = pHead2 if not p1 else p1.next  
            p2 = pHead1 if not p2 else p2.next  
        return p1 

《剑指offer》--- 两个链表的第一个公共结点

标签:节点   first   lse   sel   nod   common   node   center   技术   

原文地址:https://www.cnblogs.com/lliuye/p/9208277.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!