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

相关推荐
团子的二进制世界4 分钟前
G1垃圾收集器是如何工作的?
java·jvm·算法
吃杠碰小鸡8 分钟前
高中数学-数列-导数证明
前端·数学·算法
故事不长丨8 分钟前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
long3168 分钟前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
近津薪荼9 分钟前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
熊文豪18 分钟前
探索CANN ops-nn:高性能哈希算子技术解读
算法·哈希算法·cann
熊猫_豆豆35 分钟前
YOLOP车道检测
人工智能·python·算法
艾莉丝努力练剑1 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
偷吃的耗子1 小时前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
dazzle2 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习