前言两数相加 问题 https://leetcode-cn.com/problems/add-two-numbers/ 源代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107package com;import java.util.ArrayList;import java.util.List;public class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; }}class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { // 链表1数据转换为字符串 String s1 = ""; ListNode point1 = l1; do { s1 += point1.val; point1 = point1.next; } while (point1!=null); // 链表2数据转换为字符串 String s2 = ""; ListNode point2 = l2; do { s2 += point2.val; point2 = point2.next; } while (point2!=null); // 找出长度最大的字符串和长度最小的字符串 String max = null; String min = null; if (s1.length() > s2.length()) { max = s1; min = s2; } else { max = s2; min = s1; } // 创建一个空集合用于存放求和后的数字 List<Integer> list = new ArrayList<>(); // 初始化最大长度字符串索引 int i = 0; // 初始化最小长度字符串索引 int j = 0; // 初始化进位 int pre = 0; // 如果长字符串的索引没超过范围,执行大循环 while (i<max.length()) { int sum = 0; // 如果短字符串的索引没超过范围 if (j<min.length()) { // 将两个相同位置的(此时的i和j应该是相等的)数字与进位求和 sum = Integer.parseInt(max.charAt(i)+"")+Integer.parseInt(min.charAt(j)+"")+pre; } else { // 将长度较长的字符串的当前位置数字与进位求和 sum = Integer.parseInt(max.charAt(i)+"")+pre; } // 进位归零 pre = 0; String ssum = String.valueOf(sum); // 判断求和后的数字是不是为2位数 if (ssum.length()==2) { // 如果是2位数,就把个位存入集合 list.add(Integer.parseInt(ssum.charAt(1)+"")); // 同时进位数改为1 pre = 1; } else if (ssum.length()==1) { // 如果是1位数,就直接把个位数存入集合 list.add(Integer.parseInt(ssum.charAt(0)+"")); } // 最后一圈如果还有进位,就把进位再填入集合 if (i==max.length()-1 && pre==1) { list.add(1); } // 每次循环,两个下标自增 i++; j++; } // 创建一个空链表,结果存入空链表 ListNode listNode = new ListNode(); ListNode point = listNode; for (int k = 0; k < list.size(); k++) { point.val = list.get(k); if (k!=list.size()-1) { point.next = new ListNode(); point = point.next; } } return listNode; }} 完成