代码拉取完成,页面将自动刷新
# 输入:l1 = [2,4,3], l2 = [5,6,4]
# 输出:[7,0,8]
# 解释:342 + 465 = 807.
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self, l1, l2):
# 如果有一个listnode没有填写,就返回剩下一个即可
if l1 == None:
return l2
if l2 == None:
return l1
dummy = ListNode(0)
p = dummy # 设置初始的Listnode,主要是利用listnode的next操作
carry = 0 # carry位主要保存进一操作
# 若l1和l2都还不是None
while l1 and l2:
# 算当前位置的值,并且要加上之前的carry位
p.next = ListNode((l1.val + l2.val + carry) % 10)
carry = (l1.val + l2.val + carry) // 10 # 更新carry位
l1 = l1.next # 更新l1,去掉当前头部第一个元素
l2 = l2.next
p = p.next
# 如果链表长度不相等,l1长,把l1后面的数字都到尾部
if l1:
while l1:
p.next = ListNode((l1.val + carry) % 10)
carry = (l1.val + carry) // 10 # 更新carry位
l1 = l1.next # 更新l1,去掉当前头部第一个元素
p = p.next
if l2:
while l2:
p.next = ListNode((l2.val + carry) % 10)
carry = (l2.val + carry) // 10 # 更新carry位
l2 = l2.next # 更新l1,去掉当前头部第一个元素
p = p.next
# 如果加到最后一位还需要进位,那么就把最后一位加上去,carry最大只可能为1
if carry == 1:
p.next = ListNode(1)
# 此时的p已经不是最开始的p,但是dummy指向了p的地址,用dummy去访问,next才是真正的值
return dummy.next
if __name__ == '__main__':
sol = Solution()
l1: ListNode = ListNode(2, ListNode(2, ListNode(5)))
l2: ListNode = ListNode(1, ListNode(3, ListNode(4)))
res = sol.addTwoNumbers(l1, l2)
print(res.val)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。