题目:
给定两个非空链表来代表两个非负数,位数按照逆序方式存储,它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
分析:
- 建立新的链表,为返回头指针,需要新建一个当前指针
- 遍历两个链表,对应元素相加,和大于10,进位
代码:
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
next = 0
addLink = ListNode(0)
temp = addLink
nextBit = 0
while l1 or l2:
value = (l1.val if l1 else 0) + (l2.val if l2 else 0) + nextBit
if value > 9:
value %= 10
nextBit = 1
else:
nextBit = 0
temp.next = ListNode(value)
if l1: l1 = l1.next
if l2: l2 = l2.next
temp = temp.next
if nextBit:
temp.next = ListNode(nextBit)
return addLink.next
思考:
- 需要考虑两链表长度不一致
- 需要考虑链表遍历结束,仍然有进位的情况