JZ52 两个链表的第一个公共结点![image-20230919093933895](https://img-blog.csdnimg.cn/img_convert/6e3841a3c98e80451d0d62df3793154f.png)
示例一
输入:{1,2,3},{4,5},{6,7}
返回值:{6,7}
说明:第一个参数{1,2,3}代表是第一个链表非公共部分,第二个参数{4,5}代表是第二个链表非公共部分,最后的{6,7}表示的是2个链表的公共部分
这3个参数最后在后台会组装成为2个两个无环的单链表,且是有公共节点的
示例二
输入:{1},{2,3},{}
返回值:{}
说明:2个链表没有公共节点 ,返回null,后台打印{}
解题思路:因为是两个链表,可以用双指针分别指向两链表的头结点,同时开始遍历,当他们遍历完自己的链表后再去遍历对方的链表,因为两个链表有公共节点,因此他们把自身和对方的路都走一遍,走过的路程肯定是相同的,所以必会在公共节点处相遇,如果没有公共节点,他们也会在最后的none节点处相遇
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
#
# @param pHead1 ListNode类
# @param pHead2 ListNode类
# @return ListNode类
#
class Solution:
def FindFirstCommonNode(self , pHead1 , pHead2 ):
# write code here
if pHead1 is None or pHead2 is None:
return None
# 创建两个指针,分别指向两个链表的头结点
p1, p2 = pHead1, pHead2
while p1 != p2:
if p1:
p1 = p1.next
else:
p1 = pHead2 #重新遍历链表2
if p2:
p2 = p2.next
else:
p2 = pHead1 ##重新遍历链表1
return p1
2 = pHead1 ##重新遍历链表1
return p1