给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
原题如上
看来题解1,如下:
通过使用一个进位值来辅助链表数的相加。
我试着用Java写了如下代码(不完善的地方希望小伙伴给点建议):
package t2;import java.util.LinkedList;public class ADDlianbiao {public static void main(String[] args) {LinkedList<Integer> list1 = new LinkedList<>();//定义链表1LinkedList<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);}
}
运行结果如下: