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,每天搞一道 。

相关推荐
小雅痞18 小时前
[Java][Leetcode simple] 1. 两数之和
java·算法·leetcode
somi718 小时前
ARM-驱动-09-LCD FrameBuffer
arm开发·驱动开发·算法·自用
乐迪信息18 小时前
乐迪信息:智慧港口AI防爆摄像机实现船舶违规靠岸自动抓拍
大数据·人工智能·算法·安全·目标跟踪
winxp-pic18 小时前
图片校正软件 操作说明及算法介绍
算法
wayz1118 小时前
Day 6 编程实战:决策树与过拟合分析
算法·决策树·机器学习
ฅ ฅBonnie18 小时前
vLLM 推理后端简介
人工智能·python·算法
贾斯汀玛尔斯18 小时前
每天学一个算法--堆排序(Heap Sort)
数据结构·算法
programhelp_18 小时前
ZipRecruiter CodeSignal OA 2026|最新真题分享 + 速通攻略
数据结构·经验分享·算法·面试
liuyao_xianhui18 小时前
map和set_C++
java·开发语言·数据结构·c++·算法·宽度优先
墨^O^19 小时前
C++ Memory Order 完全指南:从 relaxed 到 seq_cst,深入理解无锁编程与 happens-before
linux·开发语言·c++·笔记·学习·算法·缓存