36.两个链表的第一个公共节点
题目描述
输入两个链表,找出他们的的一个公共节点
解题思路
公共节点的样子:
思路1:把两个链表pHead1,pHead2拼接起来。第一个pHead1在前,pHead2在后;第二个pHead2在前,pHead1在后。同时遍历两个大链表,就能找到公共节点。时间复杂度O(m+n),空间复杂度O(m+n)。
思路2:获取两个链表的长度,把长度长的链表砍掉多的那部分,同时遍历,就能找到公共节点。时间复杂度O(m+n),空间复杂度O(MAX(m,n))
在这里我使用思路2
Python代码如下
# -*- 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
if not pHead1 or not pHead2:
return None
cur1, cur2 = pHead1, pHead2
m = self.getLength(pHead1)
n = self.getLength(pHead2)
if m > n:
for i in range (m-n):
pHead1 = pHead1.next
if m < n:
for i in range (n-m):
pHead2 = pHead2.next
while pHead1 and pHead2:
if pHead1 == pHead2:
return pHead1
pHead1 = pHead1.next
pHead2 = pHead2.next
return None
def getLength(self, pHead):
length = 0
while pHead:
length += 1
pHead = pHead.next
return length