两个链表的第一个公共结点

 

 

 解题思路:看长的链表比短的链表长了多少(假设有k个长度),然后让长的链表先走k个长度,直到两个链表出现第一次相同时即为第一个公共点。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        
        #第一个参数给比较短的链表
            #第二个参数是比较长的那个链表值
            #第三个参数比较短的链表头
            #第四个参数比较短的链表头
        def findequal(shortPointer,longPointer,shortHead,longHead):
            k=0
            #寻找链表长度之间的差值
            while longPointer:
                longPointer=longPointer.next
                k+=1
                #先让长的那个走k步    
            shortPointer=shortHead
            longPointer=longHead
            for i in range(k):
                longPointer=longPointer.next
            while shortPointer !=longPointer:
                shortPointer=shortPointer.next
                longPointer=longPointer.next
            return shortPointer
        # write code here
        pTmp1=pHead1
        pTmp2=pHead2
        
        while pTmp1 and pTmp2:
            #当两个链表一样长的时候
            if pTmp1 == pTmp2:
                return pTmp1
            pTmp1=pTmp1.next
            pTmp2=pTmp2.next
        if pTmp1:
            return findequal(pTmp2,pTmp1,pHead2,pHead1)
#                 k=0
#                 #寻找链表长度之间的差值
#                 while pTmp1:
#                     pTmp1=pTmp1.next
#                     k+=1
#                 #先让长的那个走k步    
#                 pTmp1=pHead1
#                 pTmp2=pHead2
#                 for i in range(k):
#                     pTmp1=pTmp1.next
#                 #
#                 while pTmp1 !=pTmp2:
#                     pTmp1=pTmp1.next
#                     pTmp2=pTmp2.next
#                 return pTmp1
            
        if pTmp2:
            return findequal(pTmp1,pTmp2,pHead1,pHead2)
#                 k=0
#                 #寻找链表长度之间的差值
#                 while pTmp2:
#                     pTmp2=pTmp2.next
#                     k+=1
#                 #先让长的那个走k步    
#                 pTmp1=pHead1
#                 pTmp2=pHead2
#                 for i in range(k):
#                     pTmp2=pTmp2.next
#                 #
#                 while pTmp1 !=pTmp2:
#                     pTmp1=pTmp1.next
#                     pTmp2=pTmp2.next
#                 return pTmp1
            

 

posted @ 2021-04-02 16:03  努力中的小菜鸟  阅读(73)  评论(0)    收藏  举报