Leetcode_02【两数相加】——【难度:中】

文章目录:

  • 题目
  • 脚本一
  • 脚本逻辑分析

题目:

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

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

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

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807


脚本一:【耗时80ms】

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

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        str1 = ""
        str2 = ""
        first = l1
        second = l2
        while first != None:
            str1 += str(first.val)
            first = first.next
        while second != None:
            str2 += str(second.val)
            second = second.next
        str3 = str1[::-1]
        str4 = str2[::-1]
        n1 = int(str3) + int(str4)
        str5 = str(n1)
        str6 = str5[::-1]
        len1 = len(str6)
        l3 = ListNode(0)
        l3.next = l1
        third = l3
        for i in range(len1):
            bb = ListNode(int(str6[i]))
            third.next = bb
            third = third.next
        l3 = l3.next
        return(l3)

脚本逻辑分析:

  1. 此题涉及单链表的知识,在此笔者做简单的介绍:单链表的特点是当前节点会记录本节点的值,并指向下一节点,即通过拥有val和next的属性;
  2. 举一个例子:l1 = 2 -> 4 -> 3(不能如此赋值,只是为了演示方便),即l1是一个3节点的单链表;如果l1 = l1.next  那么等同于l1 = 4 -> 3;所以节点的移动和赋值通常由中间变量来进行;如:first=l1,此时first和l1均指向同一个链表,first.val = 5 表示修改当前节点的值为5,此修改会影响l1的链表,因为l1和first均指向同一个链表;first = first.next,此时first =  4 -> 3【此时first的链表也是l1链表的一部分,修改first的值也就是修改l1的值】  
  3. 由题目可知:题目将两加数反转变为链表的形式,脚本的逻辑是先把两加数还原并相加,然后将两数之和字符串化,再通过链表的方式将和中的每个值赋予链表;接着去掉多余的链表头节点即可
原文地址:https://www.cnblogs.com/mailong/p/12227328.html