难度等级:中等
题目描述:
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 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