题目描述
输入两个链表,找出它们的第一个公共结点。
思路:首先得到两个列表的长度,现在较长的列表上走若干步,然后同时在两个链表上遍历,找到的第一个公共节点就是它们的第一个公共节点。
# -*- 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
length1 = self.GetLength(pHead1)
length2 = self.GetLength(pHead2)
pHeadLong = pHead1
pHeadShort = pHead2
if (length2> length1):
pHeadLong = pHead2
pHeadShort = pHead1
lengthDif = abs(length1-length2)
#先在长链表上走
for i in range(lengthDif):
pHeadLong = pHeadLong.next
while pHeadLong and pHeadShort and pHeadLong!=pHeadShort:
pHeadLong = pHeadLong.next
pHeadShort = pHeadShort.next
pFirstCommonNode = pHeadLong
return pFirstCommonNode
def GetLength(self, pHead):
length = 0
pNode = pHead
while pNode:
length+=1
pNode = pNode.next
return length