自学内容网 自学内容网

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);
    }
}

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


原文地址:https://blog.csdn.net/2301_79479634/article/details/145101964

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!