Leetcode-Add Two Numbers Python

本文深入探讨了在链表数据结构中实现两个数相加的算法。通过定义链表节点和解决方案类,详细展示了如何处理进位、遍历链表以及最终结果的构造过程。
# 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:
        result = ListNode(0)  #保存返回的结果
        final = []     #临时列表
        flag = 0       #进位标记
        while(l1!=None and l2!= None):
            temp = l1.val+l2.val+flag
            if(temp<10):
                final.append(temp) 
                flag = 0
            elif(temp == 10):
                final.append(0)
                flag = 1
            elif(temp>10):
                final.append(temp-10)
                flag = 1
            l1 = l1.next
            l2 = l2.next
        while(l1!=None):
            if(l1.val+flag<10):
                final.append(l1.val+flag)
                flag = 0
            elif(l1.val+flag==10):
                final.append(0)
                flag = 1
            elif(l1.val+flag>10):
                final.append(l1.val+flag-10)
                flag = 1
            l1 = l1.next
        while(l2!=None):
            if(l2.val+flag<10):
                final.append(l2.val+flag)  
                flag = 0
            elif(l2.val+flag==10):
                final.append(0)
                flag = 1
            elif(l2.val+flag>10):
                final.append(l2.val+flag-10)
                flag = 1
            l2 = l2.next
        #在l1和l2都遍历完成的情况下,仍然存在进位
        if(flag!=0):
            final.append(flag)
        result = ListNode(final[0])
        pre = result
        i=1
        #将列表中的结果转为ListNode类型,方便返回题目中要求的结果形式
        while(i<len(final)):
            temp = ListNode(final[i])
            pre.next = temp
            pre = temp
            i+=1
        return result

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值