难度等级:中等

题目描述:

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

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

 

进阶:

如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。

 

示例:

输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 8 -> 0 -> 7

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

过提取两个链表数据,相加后,再将结果写入新的链表

解题代码:

# 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:        
        a = l1.val  # 因为是非空链表,所以不用判断链表是否为空
        l1 = l1.next
        while l1:
            a = a*10 + l1.val
            l1 = l1.next
        
        b = l2.val  # 因为是非空链表,所以不用判断链表是否为空
        l2 = l2.next
        while l2:
            b = b*10 + l2.val
            l2 = l2.next
        sumab = a + b
        sumab = str(sumab)

        l3 = ListNode(sumab[0])  # 定义链表,用于遍历链表赋值
        p3 = l3  # 指向l3的头结点,用于最后返回值
        if len(sumab)>1:
            for v in sumab[1:]:
                l3.next = ListNode(v)  # 新增节点
                l3 = l3.next
        return p3

 

posted on 2020-04-14 16:12  jaysonteng  阅读(245)  评论(0编辑  收藏  举报