public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
if (l1==null) return l2;
else if (l2==null) return l1;
ListNode head;
ListNode node = new ListNode(0);
head = node;
int tmp = 0;//表示进位
do {
tmp = l1.val + l2.val + tmp;
node.next = new ListNode(tmp % 10);
tmp = tmp / 10;
l1 = l1.next;
l2 = l2.next;
node = node.next;
} while (l1 != null && l2 != null);
while (l1!=null) {
tmp = tmp + l1.val;
node.next = new ListNode(tmp%10);
tmp = tmp / 10;
l1 = l1.next;
node = node.next;
}
while (l2!=null) {
tmp = tmp + l2.val;
node.next = new ListNode(tmp%10);
tmp = tmp / 10;
l2 = l2.next;
node = node.next;
}
if (tmp > 0) {
node.next = new ListNode(1);
}
ListNode result = head.next;
head.next = null;
return result;
}
比较简单,只需要注意 l1
和 l2
长度一样的情况,此时第一个 do-while
循环会同时使得 l1
和 l2
为 null
,此时如果产生了进位,则还需要处理,如 (5 , 5)
。
以及长度不一致,但是 tmp 进位与之后长的一组结合,会一直产生进位的情况,如 (9 , 9)
。