【探索-中級演算法】兩數相加
阿新 • • 發佈:2018-11-05
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)
。