LeetCode-题2:两数相加 (Python3)

思路:标记是否产生进位,并且两个链表均遍历完之后,要考虑进位是否是1,若为1则仍需要新建一个节点才存储进位的信息

Python3

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        p1 = l1
        p2 = l2
        if not p1:
            return p2
        if not p2:
            return p1
        key = 0  # key表示是否进位
        Head = ListNode((p1.val + p2.val) % 10)
        key = int((p1.val + p2.val) / 10)
        p1 = p1.next
        p2 = p2.next
        p = Head
        while p1 and p2:
            mid = ListNode((p1.val + p2.val + key) % 10)
            key = int((p1.val + p2.val + key) / 10)
            p.next = mid
            p = mid
            p1 = p1.next
            p2 = p2.next
        
        while p1:
            mid = ListNode((p1.val + key) % 10)
            key = int((p1.val + key) / 10)
            p.next = mid
            p = mid
            p1 = p1.next
        
        while p2:
            mid = ListNode((p2.val + key) % 10)
            key = int((p2.val + key) / 10)
            p.next = mid
            p = mid
            p2 = p2.next
        
        if key > 0:  # 若最终有进位
            mid = ListNode(key)
            key = 0
            p.next = mid
            p = mid
        
        return Head

精简写法:(创建一个带头的节点)

 def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            re = ListNode(0)
            r=re
            carry=0
            while(l1 or l2):
                x= l1.val if l1 else 0
                y= l2.val if l2 else 0
                s=carry+x+y
                carry=s//10
                r.next=ListNode(s%10)
                r=r.next
                if(l1!=None):l1=l1.next
                if(l2!=None):l2=l2.next
            if(carry>0):
                r.next=ListNode(1)
            return re.next

节省空间的写法:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值