You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
如例子中的:
2 + 5 = 7
4 + 6 = 10, 此时要进位
3 + 4 + 1(进位的) = 8
我们设2个指针,curL1遍历第一个链表, curL2 遍历第二个链表。
需要注意的有3点:
1. 进位的问题
2. curL1,curL2某个为null的时候,不为null 还需要继续进行运算。
此时,不要忘了之前的进位
3. 当curL1, curL2都为null的时候,同样要把进位给加上。
复杂度:
时间复杂度:O (m + n) ( m, n分别为两个链表的长度)
空间复杂度:O (1)
运行时间:
代码:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode curL1 = l1, curL2 = l2, fakeHead = new ListNode(-1), curSum = fakeHead;
int add = 0, addResult = 0;
while (curL1 != null && curL2 != null) {
addResult = curL1.val + curL2.val + add;
curSum.next = new ListNode(addResult % 10);
curSum = curSum.next;
curL1 = curL1.next;
curL2 = curL2.next;
add = addResult / 10;
}
ListNode cur = null;
if (curL1 != null) {
cur = curL1;
}
if (curL2 != null) {
cur = curL2;
}
while (cur != null) {
addResult = cur.val + add;
curSum.next = new ListNode(addResult % 10);
curSum = curSum.next;
add = addResult / 10;
cur = cur.next;
}
if (add != 0) {
curSum.next = new ListNode(add);
}
return fakeHead.next;
}