LeetCode33

445.两数相加Ⅱ

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

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

示例1:

复制代码
输入:l1 = [7,2,4,3], l2 = [5,6,4]
输出:[7,8,0,7]

示例2:

复制代码
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[8,0,7]

示例3:

复制代码
输入:l1 = [0], l2 = [0]
输出:[0]

提示:

  • 链表的长度范围为 [1, 100]
  • 0 <= node.val <= 9
  • 输入数据保证链表代表的数字无前导 0

**进阶:**如果输入链表不能翻转该如何解决?

python 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        p, q = l1, l2
        n1, n2 = 0, 0
        while p:
            p = p.next
            n1 += 1
        while q:
            q = q.next
            n2 += 1
        
        l3 = ListNode()
        p, q, j = l1, l2, l3
        while p and q:
            if n1 > n2:
                x = p.val
                y = 0
                n1 -= 1
                p = p.next
            elif n2 > n1:
                x = 0
                y = q.val
                n2 -= 1
                q = q.next
            else:
                x = p.val
                y = q.val
                n1 -= 1
                n2 -= 1
                p = p.next
                q = q.next
            if x + y >= 10:
                node = ListNode(x+y-10)
                j.val += 1
            else:
                node = ListNode(x+y)
            j.next = node
            j = j.next
        
        pre = None
        cur = l3
        while cur:
            nxt = cur.next
            cur.next = pre
            pre = cur
            cur = nxt
        #return pre

        kk = pre
        while kk:
            if kk.val >= 10:
                kk.val -= 10
                if kk.next:
                    kk.next.val += 1
                else:
                    node = ListNode(1)
                    kk.next = node
            kk = kk.next

        pre1 = None
        cur1 = pre
        while cur1:
            nxt1 = cur1.next
            cur1.next = pre1
            pre1 = cur1
            cur1 = nxt1
        
        if pre1.val == 0:
            return pre1.next
        else:
            return pre1
python 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        pre1 = None
        cur = l1
        while cur:
            nxt = cur.next
            cur.next = pre1
            pre1 = cur
            cur = nxt
        #return pre1

        pre2 = None
        cur = l2
        while cur:
            nxt = cur.next
            cur.next = pre2
            pre2 = cur
            cur = nxt
        #return pre2

        cur = l3 = ListNode()
        carry = 0
        while pre1 or pre2 or carry:
            s = carry + (pre1.val if pre1 else 0) + (pre2.val if pre2 else 0)
            cur.next = ListNode(s % 10)
            carry = s // 10
            cur = cur.next
            if pre1:
                 pre1 = pre1.next
            if pre2:
                 pre2 = pre2.next
        #return l3.next

        pre3 = None
        cur = l3.next
        while cur:
            nxt = cur.next
            cur.next = pre3
            pre3 = cur
            cur = nxt
        return pre3

不翻转链表:把单链表先依次储存到栈里,再依次出栈。

相关推荐
Coovally AI模型快速验证1 分钟前
检测+跟踪一体化!4.39M参数、8.3W功耗,轻量化模型让无人机在露天矿实时巡检
算法·yolo·无人机·智能巡检·智慧矿山
玛卡巴卡ldf5 分钟前
【LeetCode 手撕算法】(矩阵)73-矩阵置零、54-螺旋矩阵(贪吃蛇)、48-旋转图像
java·数据结构·算法·leetcode·力扣
C^h5 分钟前
RTthread中的内存池理解
linux·数据库·c++·算法·嵌入式
深藏功yu名5 分钟前
Day25(高阶篇):RAG检索与重排序算法精研|从原理到参数调优,彻底攻克检索瓶颈
人工智能·算法·ai·自然语言处理·排序算法·agent
程序员小寒6 分钟前
JavaScript设计模式(四):发布-订阅模式实现与应用
开发语言·前端·javascript·设计模式
csbysj20206 分钟前
JSON 语法
开发语言
郝学胜-神的一滴9 分钟前
深入解析:生成器在UserList中的应用与Python可迭代对象实现原理
开发语言·python·程序人生·算法
雪木木10 分钟前
刷题:力扣热题100--滑动窗口(Day03)
算法·leetcode
为美好的生活献上中指10 分钟前
*Java 沉淀重走长征路*之——《Linux 从入门到企业实战:一套六步法,带你打通运维与开发的任督二脉》
java·linux·运维·开发语言·阿里云·华为云·linux命令
Yzzz-F12 分钟前
Problem - 2157D - Codeforces
算法