剑指Offer(Python多种思路实现):两个链表的第一个公共节点
面试52题:
题目:两个链表的第一个公共节点
题:输入两个链表,找出它们的第一个公共节点。
解题思路一:
class Solution:
def FindFirstCommonNode(self, pHead1, pHead2):
length1=self.GetLength(pHead1)
length2=self.GetLength(pHead2)
if length1>length2:
headLong=pHead1
headShort=pHead2
else:
headLong=pHead2
headShort=pHead1
diff=abs(length1-length2)
for i in range(diff):
headLong=headLong.next
while headLong!=None and headShort!=None and headLong!=headShort:
headLong=headLong.next
headShort=headShort.next
return headLong
def GetLength(self,pHead):
length=0
while pHead:
pHead=pHead.next
length += 1
return length
解题思路二:
def getIntersectionNode(self, headA, headB):
p1, p2 = headA, headB
while p1 is not p2:
p1 = p1.next if p1 else headB
p2 = p2.next if p2 else headA
return p1