代码仓库:Github | Leetcode solutions @doubleZ0108 from Peking University.
- 解法1(T40.5% S18.2%): 非常经典的小学加法问题,只不过需要用链表来实现,同时遍历两个链表,对位相加(同时加上上一位的进位),将10以下的整数部分创建新的一个链表节点加入结果链表的next中,将10以上的部分作为进位保留。当该循环结束时意味着两链表中较短的那个已经处理完,接下来应该继续处理还剩下的那个较长的链表,可以直接写两边相似的while循环来处理。最后再把可能剩下的进位单独考虑一下即可。
class Solution(object):
def addTwoNumbers(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
result = ListNode()
head = result
bonus = 0
while l1 and l2:
fresh = ListNode()
head.next = fresh
head = fresh
fresh.val = (l1.val + l2.val + bonus) % 10
bonus = (l1.val + l2.val + bonus) // 10
l1 = l1.next
l2 = l2.next
while l1:
fresh = ListNode()
head.next = fresh
head = fresh
fresh.val = (l1.val + bonus) % 10
bonus = (l1.val + bonus) // 10
l1 = l1.next
while l2:
fresh = ListNode()
head.next = fresh
head = fresh
fresh.val = (l2.val + bonus) % 10
bonus = (l2.val + bonus) // 10
l2 = l2.next
if bonus != 0:
fresh = ListNode()
fresh.val = bonus
fresh.next = None
head.next = fresh
return result.next