当前位置: 首页 > article >正文

2.两数相加--力扣

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

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

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
在这里插入图片描述
原题如上

看来题解1,如下:
在这里插入图片描述
通过使用一个进位值来辅助链表数的相加。

我试着用Java写了如下代码(不完善的地方希望小伙伴给点建议):

package t2;

import java.util.LinkedList;

public class ADDlianbiao {
    public static void main(String[] args) {
        LinkedList<Integer> list1 = new LinkedList<>();//定义链表1
        LinkedList<Integer> list2 = new LinkedList<>();//定义链表2
        //向链表1中加入数据
        list1.add(1);
        list1.add(5);
        list1.add(9);
        //向链表2中加入数据
        list2.add(7);
        list2.add(2);
        list2.add(3);
        list2.add(4);
        //951+4327=5278
        //计算两个链表长度
        int a=list1.size();
        int b=list2.size();
        //为循环做准备
        int jinwei=0;//存储进位
        String jg = "";//将结果转为字符串存储
        //开始相加
        for(int i=0;i<(a>b?a:b);i++){//遍历到最长的链表结束
            //list1.size()>list2.size()
            if (a > b){
                if (i >= b){//为防止下标越界
                    if (jinwei == 0){//进位等于0,后面进位便不会产生,所以直接将数字加在后面就行
                        jg += list1.get(i);
                    }
                    if (jinwei != 0){//进位不等于0时,除了不用list2之外,其余和不越界时一样
                        int m = list1.get(i) + jinwei;
                        jinwei = m / 10;//更新进位数
                        jg +=  (m % 10);//存结果
                    }
                }else {//没越界时,正常加
                    int m = list1.get(i) + list2.get(i) + jinwei;//保证每次循环都可以加上上次的进位数
                    jinwei = m / 10;//更新进位数
                    jg +=  (m % 10);//存结果
                }
            }
            //list2.size()>list1.size()
            if (b > a){
                if (i >= a){
                    if (jinwei == 0){
                        jg += list2.get(i);
                    }
                    if (jinwei != 0){
                        int m = list2.get(i) + jinwei;
                        jinwei = m / 10;//更新进位数
                        jg +=  (m % 10);//存结果
                    }
                }else {//没越界时,正常加
                    int m = list1.get(i) + list2.get(i) + jinwei;//保证每次循环都可以加上上次的进位数
                    jinwei = m / 10;//更新进位数
                    jg +=  (m % 10);//存结果
                }
            }
            //list1.size()=list2.size()
            if (a == b) {
                int m = list1.get(i) + list2.get(i) + jinwei;//保证每次循环都可以加上上次的进位数
                jinwei = m / 10;//更新进位数
                jg +=  (m % 10);//存结果
            }
        }
        //实现字符串的翻转
        StringBuilder sb = new StringBuilder(jg);
        String fjg = sb.reverse().toString();
        System.out.println(fjg);
    }
}

运行结果如下:
在这里插入图片描述


http://www.kler.cn/a/506532.html

相关文章:

  • 计算机网络 (45)动态主机配置协议DHCP
  • 【matlab】matlab知识点及HTTP、TCP通信
  • 【excel】VBA股票数据获取(搜狐股票)
  • Docker的入门
  • 【STM32】HAL库USB实现软件升级DFU的功能操作及配置
  • [Linux]Docker快速上手操作教程
  • tomcat文件目录讲解
  • 剑指Offer|LCR 031. LRU 缓存
  • Haskell语言的网络编程
  • 基于 Electron 应用的安全测试基础 — 提取和分析 .asar 文件
  • 【k8s面试题2025】1、练气期
  • 鸿蒙-点击Notification通知并打开App的具体页面
  • 动态规划汇总1
  • 服务器数据恢复—Zfs文件系统数据恢复案例
  • mongDB学习笔记
  • 基于Linux系统指令使用详细解析
  • 浅谈云计算18 | OpenStack架构概述
  • 自动化仓储管理与库存控制
  • 《零基础Go语言算法实战》【题目 4-11】在不使用任何内置散列表库的情况下设计一个 HashSet
  • 蓝桥杯刷题第三天——排序
  • 如何有效防止和解决IP劫持问题
  • Linux中常用命令详解
  • STM32 FreeRTOS消息队列
  • 使用DAS的导出和导入功能迁移GaussDB数据
  • 【JAVA】-JDK
  • Windows Subsystem for Linux (WSL) 中安装 Redis