直接使用蛮力法,先遍历第一个链表,然后遍历第二个,判断是不是同一个结点,是的话返回就行,但是这样时间复杂度O(m*n)。

改进一步可以先得到两个链表的长度la和lb,假设la>lb(反过来当然一样),然后la先走la-lb步,然后双指针同步走,相同的第一个元素就是公共节点,返回即可。

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
        cur1 = pHead1
        while cur1:
            cur2 = pHead2
            while cur2:
                if cur1 == cur2:
                    return cur1
                else:
                    cur2 = cur2.next
            cur1 = cur1.next
        return None


pHead1 = ListNode(1)
pHead1.next = ListNode(2)
pHead2 = ListNode(3)
pHead2.next = pHead1.next
x = Solution().FindFirstCommonNode(pHead1 , pHead2)
cur = x
while cur:
    print(cur.val)
    cur = cur.next