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

Posted shunyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 两个链表的第一个公共结点相关的知识,希望对你有一定的参考价值。

题目描述

输入两个链表,找出它们的第一个公共结点。
 
看到这道题的时候,很多人的第一反应就是采用蛮力的方法:在第一个链表上顺序遍历每个节点,每遍历到一个节点的时候,在第二个链表上顺序遍历每个节点。如果第二个链表上的节点和第一个链表上的节点一样,就说明两个链表在节点上重合,于是就找到了公共的节点。而通常蛮力并不是好的方法。
 
思路:
第一种情况:相同长度有交点
两个指针一起走,步长一致,碰到第一个相同的节点 p1 == p1,退出循环,return p1。
第二种情况:相同长度无交点
两个指针一起走,直到走到最后一个节点,p1.next 和 p2.next都为 None,满足 相等的条件,退出循环,return p1。
第三种情况:不同长度有交点
两个指针一起走,当一个指针p1走到终点时,说明p1所在的链表比较短,让p1指向另一个链表的头结点开始走,直到p2走到终点,让p2指向短的链表的头结点,那么,接下来两个指针要走的长度就一样了,变成第一种情况。
第四种情况:不同长度无交点
两个指针一起走,当一个指针p1走到终点时,说明p1所在的链表比较短,让p1指向另一个链表的头结点开始走,直到p2走到终点,让p2指向短的链表的头结点,那么,接下来两个指针要走的长度就一样了,变成第二种情况。
 
 1 # -*- coding:utf-8 -*-
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 class Solution:
 7     def FindFirstCommonNode(self, pHead1, pHead2):
 8         # write code here     
 9         
10         if not pHead1 or not pHead2:
11             return None
12         p1 = pHead1
13         p2 = pHead2
14         
15         while p1 != p2:
16             if not p1:
17                 p1 = pHead2
18             else:
19                 p1 = p1.next
20                 
21             if not p2:
22                 p2 = pHead1
23             else:
24                 p2 = p2.next
25         return p1
26 
27      

 

借鉴:http://blog.csdn.net/lynette_bb/article/details/
     https://www.baidu.com/link?url=R7xVATIfwdWdfoZY414Lsw2G-bAhK0uIEEooCvZh-FShhKfpqPHcy4dIr8anDHDODjeJIHIW-EMLSAAFcDxJFafN0UX2QamdZqrvHVtF9Le&wd=&eqid=d66f34b40000306b000000065a93ae50
 
 

以上是关于python 两个链表的第一个公共结点的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

[ 链表OJ题--C语言] 相交链表 两个链表的第一个公共结点

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

剑指Offer 两个链表的第一个公共结点