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

相关推荐
文丑颜不良啊2 小时前
LeetCode476~500题目解析
java·leetcode
人工智能培训2 小时前
边缘AI与大模型轻量化:让智能跑进每一个终端
大数据·人工智能·算法·重构·生活
lengxuenong2 小时前
树状数组 · 信息学学习手册3-优化LIS
c++·学习·算法
动词ing3 小时前
【题目练习】外观数列
算法
余额瞒着我当琳3 小时前
C++11,发展历史浅谈,初始化列表和对象初始化,右值引用和移动语义
java·开发语言·c++·算法
suhan3 小时前
【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)
数据结构·算法·排序算法
suhan3 小时前
【数据结构】六、图:3.十字链表、邻接多重表、边集数组
数据结构·算法·排序算法
Dola_Zou3 小时前
工商业储能系统核心策略
算法·自动化·软件工程
Tsuki_tl3 小时前
【优选算法:双指针】——复写零题解
java·c++·算法·leetcode·数组·双指针·复写零