题目描述:
输入两个链表,找出它们的第一个公共结点。
解题思路:
首先遍历两个链表,分别得到两个链表的长度,然后让长的链表先走diff步(diff为长度差),然后两个指针同时走,走到相同即为第一个公共结点。
依据是公共部分的长度是相等的。
解答:
# -*- 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
len1 = 0
p2 = pHead2
len2 = 0
while p1 != None:
p1 = p1.next
len1 += 1
while p2 != None:
p2 = p2.next
len2 += 1
if len1 >= len2:
return self.FindFirstShortLong(pHead2, len2, pHead1, len1)
else:
return self.FindFirstShortLong(pHead1, len1, pHead2, len2)
def FindFirstShortLong(self,spHead, spLen, lpHead, lpLen):
sp = spHead
lp = lpHead
i = 0
while i < lpLen - spLen:
lp = lp.next
i += 1
while sp != lp and sp != None:
sp = sp.next
lp = lp.next
return sp