LeetCode刷题(python版)——Topic2两数相加

一、题设

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序的方式存储的,并且每个节点只能存储一位数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/add-two-numbers

二、基本思路

1.分情况讨论:A.链表等长 B.一方长 C.链表有空(题设排除)。

2.除了对应位加法,还应有下一位的进位(链表方向)。

3.链表等长,即按位加,随后产生进位加入下一位的计算中。

4.有某一方链表长,则按第三步操作完之后再遍历完长的一方即可。

5.最后完成全部元素计算后,进位标志仍有1,则说明产生某位单个1,加入链表中即可。

三、代码实现(python3)


class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        #创建一个存储结果的变量
        result = ListNode(0)
        p = result
        #创建一个保存进位的变量
        carry = 0

        while l1 and l2:
            #val是值
            p.next =  ListNode((l1.val + l2.val+carry) % 10 )
            #进位
            carry = (l1.val + l2.val + carry) // 10
            print(carry)
            #下一位
            l1 = l1.next
            l2 = l2.next
            p = p.next
        print(p)

        #l2比l1长
        if l2:
            while l2:
                p.next =  ListNode((l2.val + carry) % 10)
                carry = (l2.val+carry) // 10
                l2 = l2.next
                p = p.next

        #l1比l2长
        if l1:
            while l1:
                p.next = ListNode((l1.val + carry) % 10)
                carry = (l1.val+carry)// 10
                l1 = l1.next
                p = p.next

        #最后一位有进位
        if carry == 1:
            p.next = ListNode(1)
        #第一位为无效数据,舍弃
        return result.next

四、效率总结:

        效率就不谈了吧,能编出来就不错了,真是菜狗一条,今天辅导我弟功课真头大唉,加油吧,明天见~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值