leetcode 传送门
例子:
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
大体意思就是从前向后做加法,逢十进一。
在评论区找到的一个代码:
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
carry = 0 # 进位符
root = n = ListNode(0)
while l1 or l2 or carry:
# 只要 l1 l2 都不为空才进行操作,否则直接返回 0
v1 = v2 = 0
if l1:
v1 = l1.val
l1 = l1.next
if l2:
v2 = l2.val
l2 = l2.next
carry, val = divmod(v1+v2+carry, 10)
n.next = ListNode(val)
n = n.next
return root.next # 这步一定要仔细理解
divmod() 函数返回的是商和余数构成的元组。
例如 a, b = divmod(6, 3) 就是 6除以3, a = 2, b = 0
这道题涉及到链表的知识,我想用 C 解答起来会稍微容易理解一点。对于 python,主要的是理解链表的构造。
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
使用这个类来构造一个链表
idx = ListNode(3)
n = idx
n.next = ListNode(4)
n = n.next
n.next = ListNode(5)
n = n.next
print(idx.val,idx.next.val,idx.next.next.val)
其实感觉 python 做这种数据结构对于理解链表来说还是有帮助的,但是相较于 C 代码, python 的代码还是难以理解的。