LeetCode第2题题解:两数相加

LeetCode第2题:两数相加


Ps:本系列文章只为记录自己刷LeetCode过程中的解题过程和思路。


题目来源,LeetCode

题目描述:

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807


解题过程和思路:

这道题的题目很明确,按照我们手算的思路来:从低位到高位依次相加,并且有进位就向高位进位即可。其实就是用链表来存储数字,并且用计算机模拟手算的过程罢了。但是这题以我目前的能力,不太理解要怎么操作才能加快算法的效率(不能打败90%以上的人),留待以后补充。


解题收获:

记得链表最初在C++中接触过,其他语言中暂时没有接触过链表。这题让我重复复习了一遍链表,并且熟悉了在python中建立和使用链表的方法,记住啦。


代码展示

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        result_head = p = ListNode(None) # result_head为结果链表的头结点(空的,返回的时候要返回                                               # result.next),p为用来遍历的指针
        s = 0 # 初始进位为0
        while l1 or l2 or s: # 如果l1非空或l2非空或有上一次计算有进位s非0
            s = s + (l1.val if l1 else 0) + (l2.val if l2 else 0)
            val = s % 10 # eg. 21 % 10 = 1
            s = s // 10 # eg. 21 // 10 = 2
            p.next = ListNode(val) # 以val值新建一个结点
            p = p.next # 结果链表的遍历指针往下一位移
            l1 = l1.next if l1 else None # 加数链表的指针对应往下一位移
            l2 = l2.next if l2 else None # 加数链表的指针对应往下一位移
        return result_head.next # 头结点为空结点,因此返回头结点的下一个结点


结果展示

结果展示

原文地址:https://www.cnblogs.com/wangqinze/p/13605750.html