LeetCodeDiary

A Diary for solving LeetCode problems

View on GitHub
#
# @lc app=leetcode.cn id=2 lang=python3
#
# [2] 两数相加
#

# @lc code=start
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:    
        s = 0               # 初始化进位 s 为 0
        head = l1
        while l1 or l2 or s:
            # 如果 l1 或 l2 存在, 则取l1的值 + l2的值 + s(s初始为0, 如果下面有进位1, 下次加上)
            s += (l1.val if l1 else 0) + (l2.val if l2 else 0)  
            
            if l1:     
                l1.val = s % 10    # 假如l1有这一节点,直接覆盖
            else:
                last_l1.next = ListNode(s%10,None) # 假如l1没有这一节点,新建一个
                l1 = last_l1.next
            s //= 10                        
            last_l1 = l1
            l1 = l1.next if l1 else None    
            l2 = l2.next if l2 else None   
        return head   # 返回 dummy 的下一个节点, 因为 dummy 指向的是空的头结点, 下一个节点才是新建链表的后序节点

# @lc code=end