leetcode2. 两数相加

问题描述:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

示例 1:

复制代码
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

示例 2:

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

示例 3:

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

提示:

  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

上代码,拿去即可运行:

java 复制代码
package onlyqi.daydayupgo06.test;

import java.util.Objects;

public class Solution {

    public static void main(String[] args) {
        // 2---1----3---5---4
        ListNode listNode4 = new ListNode(4);

        ListNode listNode3 = new ListNode(3);

        ListNode listNode2 = new ListNode(2);
        listNode2.next = listNode4;
        listNode4.next = listNode3;
        //243
        //564
        ListNode listNode5 = new ListNode(5);
        ListNode listNode6 = new ListNode(6);
        ListNode listNode4a = new ListNode(4);
        listNode5.next = listNode6;
        listNode6.next = listNode4a;


        System.out.println("====================:" + addTwoNumbers1(listNode2, listNode5));


//        while (listNode2 != null) {
//            System.out.print(listNode2.val+"   ");
//            listNode2 = listNode2.next;
//        }
//        System.out.println("===========================================================");
//        ListNode resultNode = sortList(listNode2);
//        while (resultNode != null) {
//            System.out.print(resultNode.val + "   ");
//            resultNode = resultNode.next;
//        }

    }

    public static ListNode addTwoNumbers1(ListNode l1, ListNode l2) {
        // 1. 定义哨兵节点,方便返回结果
        ListNode dummy = new ListNode(0);
        ListNode curr = dummy;
        int carry = 0; // 进位

    
        while (l1 != null || l2 != null || carry != 0) {
            int v1 = Objects.isNull(l1) ? 0 : l1.val;
            int v2 = Objects.isNull(l2) ? 0 : l2.val;
            int count =v1+v2+carry;
            carry=count/10;
            curr.next=new ListNode(count%10);
            curr=curr.next;

            if (!Objects.isNull(l1)){
                l1=l1.next;
            }
            if (!Objects.isNull(l2)){
                l2=l2.next;
            }

        }

        return dummy.next;
    }

    public static Integer addTwoNumbers(ListNode l1, ListNode l2) {
        Integer sum = 0;
        Integer count = 0;

        while (l1 != null || l2 != null) {
            if (!Objects.isNull(l1)) {
                if (count == 0) {
                    sum = sum + l1.val;
                } else {
                    sum = (int) (sum + l1.val * Math.pow(10, count));
                }
                l1 = l1.next;
            }
            if (!Objects.isNull(l2)) {
                if (count == 0) {
                    sum = sum + l2.val;
                } else {
                    sum = (int) (sum + l2.val * Math.pow(10, count));
                }
                l2 = l2.next;
            }
            count++;
        }
        return sum;

    }



    public static class ListNode {
        int val;
        ListNode next;

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }


}

运行结果:

我要刷300道算法题,第148道 。 尽快刷到200,每天搞一道 。

相关推荐
来一碗刘肉面3 小时前
C++中的引用语法
c++·算法
Black蜡笔小新3 小时前
自动化AI算法训练服务器DLTM零代码私有化赋能智慧农业用AI智能视觉守护万亩良田
人工智能·算法·自动化
Tisfy4 小时前
LeetCode 1288.删除被覆盖区间:排序(非二重循环暴力)
算法·leetcode·题解·排序
Σίσυφος19004 小时前
激光三角 光平面标定之后计算深度图
算法·平面
阿文的代码库4 小时前
经典算法题剖析:按奇偶排序数组
数据结构·算法
AI小码4 小时前
WAIC 2026前瞻:AI产业进入拼落地的下半场
人工智能·算法·ai·程序员·大模型·编程·智能体
珠海西格电力5 小时前
零碳园区数据应用的具体场景有哪些?
大数据·人工智能·算法·架构·能源
geovindu5 小时前
CSharp: Dijkstra Algorithms
开发语言·后端·算法·c#
学逆向的6 小时前
汇编——位运算
开发语言·汇编·算法·网络安全
可编程芯片开发6 小时前
基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器
算法