给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
参考https://blog.csdn.net/iyuanshuo/article/details/79600156
代码如下
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ if l1 is None: return l2 if l2 is None: return l1 carry = 0 tmp = ListNode(0) # 第一个节点为0 l3 = tmp # 此时l3和tmp具有相同的地址 while l1 or l2: nsum = 0 if l1: nsum += l1.val l1 = l1.next if l2: nsum += l2.val l2 = l2.next realsum = (nsum + carry) % 10 # 求某一位的数字 carry = (nsum + carry) // 10 # 求进位数 l3.next = ListNode(realsum) # 将realsum添加到l3的下一个节点 l3 = l3.next # 并将l3赋值为l3的下一个节点,即原来l3下一个节点的名字变为l3,此时tmp与l3的地址不再一样 if carry: # 结束循环后,看一下还有没有进位,有的话就添上1 l3.next = ListNode(1) l3 = tmp.next # 第一个节点不算,所以将l3赋值为tmp的next,所以此时不能直接返回tmp,因为这个链表的第一个节点是初始设置的0 return l3
笔记
python 中的链表