题目描述:
给定两个用链表表示的整数,每个节点包含一个数位。
这些数位是反向存放的,也就是个位排在链表首部。
编写函数对这两个整数求和,并用链表形式返回结果。
思路:两个链表同时按位相加,把相加的结果对10取余和整除10,用取余的结果创建节点,整除的结果用在下一位的相加。
# 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:
head = ListNode(-1)
p = head
tmp = 0#记录进位
while l1 or l2 or tmp:#只要有一个链表还有值或者有进位
s = (l1.val if l1 else 0)+(l2.val if l2 else 0)+tmp
tmp = s//10#更新进位
p.next = ListNode(s%10)
l1, l2 = l1.next if l1 else None, l2.next if l2 else None#向下走一步
p = p.next
return head.next