0002. Add Two Numbers

0002. Add Two Numbers #

题目 #

  • 给定两个 非空 链表,表示两个非负整数。
  • 每位数字均按 逆序 方式存储,每个节点只存储一位数字。
  • 将两个数相加,并以相同形式返回一个表示和的链表。
  • 假定除数字 0 之外,这两个数均不会以 0 开头。

img

解释 342 + 465 = 807

思路 #

模拟 #

代码 #

模拟 #

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 recursive(ListNode l1, ListNode l2, int carry) {
    	if (l1 == null && l2 == null) {
        	return carry != 0 ? new ListNode(carry, null) : null;
        }
    	else if (l1 != null && l2 == null) {
        	return new ListNode((l1.val + carry) % 10, recursive(l1.next, null, (l1.val + carry) / 10));
        }
    	else if (l1 == null && l2 != null) {
        	return new ListNode((l2.val + carry) % 10, recursive(null, l2.next, (l2.val + carry) / 10));
        }
    	else {
        	ListNode node = new ListNode((l1.val + l2.val + carry) % 10, null);
        	node.next = recursive(l1.next, l2.next, (l1.val + l2.val + carry) / 10);
        	return node;
        }
    }
	public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    	return recursive(l1, l2, 0);
    }
}