题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
public class Solution { /** * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ public ListNode addInList (ListNode head1, ListNode head2) { // write code here StringBuffer sb1 = new StringBuffer(); StringBuffer sb2 = new StringBuffer(); while (head1 != null) { sb1.append(head1.val); head1 = head1.next; } while (head2 != null) { sb2.append(head2.val); head2 = head2.next; } String res = strAdd(sb1.toString(), sb2.toString()); ListNode root = new ListNode((int) (res.charAt(0) - '0')); ListNode cur = root; for (int i = 1; i < res.length(); i++) { cur.next = new ListNode((int) (res.charAt(i) - '0')); cur = cur.next; } return root; } public String strAdd(String s1, String s2) { StringBuffer sb = new StringBuffer(); // 补全 让s1 s2等长 int lenA = s1.length(), lenB = s2.length(); StringBuffer sb1 = new StringBuffer(); StringBuffer sb2 = new StringBuffer(); for (int i = 0; i < Math.abs(lenA - lenB); i++) { if (lenA < lenB) sb1.append(0); else sb2.append(0); } sb1.append(s1); sb2.append(s2); s1 = sb1.toString(); s2 = sb2.toString(); //System.out.println(s1 + " + " + s2); int cnt = 0; for (int i = Math.max(lenA, lenB) - 1; i >= 0; i--) { char c1 = s1.charAt(i), c2 = s2.charAt(i); int sum = c1 - '0' + c2 - '0' + cnt; if (sum < 10) { sb.append(sum); cnt = 0; } else { sb.append(sum % 10); cnt = sum / 10; } } if (cnt != 0) sb.append(cnt); return sb.reverse().toString(); } }