牛客66道编程题——两个链表的第一个公共结点

题目

输入两个链表,找出它们的第一个公共结点。

方法一:利用指针的方法

class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        # write code here
        tmp1=pHead1
        tmp2=pHead2
        #首先判断链表1和链表2长度相差了多少
        while tmp1 and tmp2:
            if tmp1==tmp2:
                return tmp1
            tmp1=tmp1.next
            tmp2=tmp2.next
        #若链表1比较长
        if tmp1:
            k=0
            while tmp1:#判断l1比l2长了多少
                tmp1=tmp1.next
                k+=1
            tmp11=pHead1
            tmp22=pHead2
            for i in range(k):#先跳指向l1的指针
                tmp11=tmp11.next
            while tmp11!=tmp22:#两个指针同时跳,知道找到相同的结点为止
                tmp11=tmp11.next
                tmp22=tmp22.next
            return tmp11
        #若链表2比较长
        if tmp2:
            k=0
            while tmp2:
                tmp2=tmp2.next
                k+=1
            tmp11=pHead1
            tmp22=pHead2
            for i in range(k):
                tmp22=tmp22.next
            while tmp11!=tmp22:
                tmp11=tmp11.next
                tmp22=tmp22.next
            return tmp11

方法二

class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        # write code here
        l1=[]
        tmp1=pHead1
        tmp2=pHead2
        
        while tmp1:
            l1.append(tmp1.val)
            tmp1=tmp1.next
        while tmp2:
            if tmp2.val in l1:
                return tmp2
            else:
                tmp2=tmp2.next
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值