输入两个链表,找出它们的第一个公共结点。
基本思想:如果两个链表有公共结点,那么从第一个公共结点开始,之后他们所有的结点都是重合的。找到对齐的位置。
# -*- 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
p1 = pHead1
p2 = pHead2
n1 = 0
n2 = 0
while p1:
p1 = p1.next
n1 += 1
while p2:
p2 = p2.next
n2 += 1
p1 = pHead1
p2 = pHead2
if n1 > n2:
temp = n1 - n2
while temp:
p1 = p1.next
temp -= 1
if n2 > n1:
temp = n2 - n1
while temp:
p2 = p2.next
temp -= 1
while p1 and p2:
if p1 == p2:
return p1
else:
p1 = p1.next
p2 = p2.next
还看到了一个很酷的做法
# -*- 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
p1 = pHead1
p2 = pHead2
while p1 != p2:
p1 = (p1.next if p1 else pHead2)
p2 = (p2.next if p2 else pHead1)
return p1