题目
给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果。
示例1:
输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
分析: 创建一个新链表,遍历两个链表,对应节点进行元素相加,新链表节点存储相加之和的个位数,给定一个变量存储进位值
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
new_head = ListNode(-1)
p = new_head
k = 0
while l1 or l2:
s = 0
if l1:
s += l1.val
l1 = l1.next
if l2:
s += l2.val
l2 = l2.next
s = s+k
k = s // 10
s = s % 10
p.next = ListNode(s)
p = p.next
if k > 0:
p.next = ListNode(k)
return new_head.next
进阶: 如果两个链表是正向存储,即高位存放在头部节点,地位存放在尾部节点,如果处理? 分析: 当两个链表正向存储时,一种方法是将两个链表进行反转,然后就变成了上述反向存储求和的问题,一种方法是借住栈的性质,先将节点元素入栈,再出栈相加,相加的过程与上述链表相加类似
|