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

相关推荐
小O的算法实验室3 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
Tbisnic4 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx5 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归6 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing6 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习6 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨7 小时前
基础数论总结
笔记·学习·算法
夜不会漫长8 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng9 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习
大熊背10 小时前
树莓派相机自动白平衡详解(四)
算法·树莓派·白平衡·isppipeline