LeetCode2. 两数相加
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { // 一.遍历链表,用StringBuilder存储字符串,因为可以直接调用reverse()*/ StringBuilder sb = new StringBuilder(); while (l1.next != null) { sb.append(l1.val); l1 = l1.next; } sb.append(l1.val);/*遍历链表1,用StringBuilder存储字符串*/ String s1 = sb.reverse().toString();/*反转字符串*/ StringBuilder sb2 = new StringBuilder(); while (l2.next != null) { sb2.append(l2.val); l2 = l2.next; } sb2.append(l2.val); String s2 = sb2.reverse().toString();/*与上同*/ /* ------------分割线-----------------*/ // 二.调用自己写的add方法 String add = add(s1, s2);/*调用add()方法模拟十进制加法运算*/ /* ------------分割线-----------------*/ // 三. 遍历相加后的字符串,从后向前遍历,存入链表数组中 ListNode n = new ListNode(add.charAt(add.length() - 1) - '0'); ListNode cur = n; for (int i = add.length() - 2; i >= 0; i--) { cur.next = new ListNode(add.charAt(i) - '0'); cur = cur.next; } return n; } // 四。自己写的模拟加法过程 public static String add(String s, String t) { String ss = ""; if (s.length() >= t.length()) {/*因为不知道长度是哪个大,所以分情况*/ while (t.length() < s.length()) { t = '0' + t;/*谁长度小,就在前面补0,最后长度两者一致*/ } } else { while (t.length() > s.length()) { s = '0' + s;/*与上同*/ } } /* ------------分割线-----------------*/ int index = 0;/*作为是否进1位的标准*/ for (int i = s.length() - 1; i >= 0; i--) {/*从后向前遍历,因为两字符串长度相同,所以随意*/ int a = (s.charAt(i) - '0' + t.charAt(i) - '0');/*两字符串的相同位置的字符相加,注意ASCII编码*/ ss = ((a + index) % 10) + ss;/*取余,添加到字符左边*/ if (a + index >= 10) {/*如果相加大于等于10,表示要进1,因此index=1*/ index = 1; } else {/*否则index=0,表示不进1*/ index = 0; } } if (index == 1) {/*特别注意,当字符串第一位为9,且刚好还要进1,则需要在前面加上一位数字1 */ ss = '1' + ss; } return ss; }