两个链表第一个公共结点

1 题目

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

2 思路描述

使用两个指针 p1,p2 分别指向两个链表的第一个结点pHead1, pHead2 。将分为以下几种情况:

  1. 当两个链表长度相等,且有公共结点时,两个指针同时后移,会找到第一个公共节点。当 p1=p2 时退出。
长度相等,有公共结点.jpg
  1. 当两个链表长度相等,且没有公共结点时,两个指针同时后移,直到两个指针都指向 None 退出。
长度相等,没有公公结点.jpg
  1. 当两个链表长度不等,且有公共结点时,两个指针同时后移,当 p1 指向 None 后,将其重新指向第二个链表的第一个结点p1=pHead2 。当 p2 指向 None 后,将其重新指向第一个链表的第一个结点p2=pHead1 。当 p1=p2 时退出。
长度不等,有公共结点.jpg
  1. 当两个链表长度不等,且没有公共结点时,两个指针同时后移,当 p1 指向 None 后,将其重新指向第二个链表的第一个结点p1=pHead2 。当 p2 指向 None 后,将其重新指向第一个链表的第一个结点p2=pHead1 。当 p1=p2=None 时退出。
长度不等,没有公共结点.jpg

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,387评论 0 13
  • 大学的时候不好好学习,老师在讲台上讲课,自己在以为老师看不到的座位看小说,现在用到了老师讲的知识,只能自己看书查资...
    和珏猫阅读 5,319评论 1 3
  • 目录 1、属性 2、链表和数组的区别 2.1、数组概述 2.2、数组和链表优缺点 2.3、链表和数组的比较 3、单...
    我哈啊哈啊哈阅读 7,836评论 1 41
  • 【今日经典】 盈满勿溢,危急不险。居盈满者,如水之将溢未溢,切忌再加一滴; 处危急者,如木之将折未折,切忌再加一搦...
    湾仔馒头阅读 1,807评论 0 0
  • 【小魔仙儿】20171022学习力7践行12 宝宝因为感冒今天不是很在状态,一不如意就哭,我背古诗今天也不接了,还...
    风轻云淡_adc3阅读 884评论 0 0