26 lines
1.4 KiB
Markdown
26 lines
1.4 KiB
Markdown
Leetcode #2 | #Medium | [[Связный список]] | [[Математика]] | [[Два указателя]]
|
|
## Идея
|
|
Указатель на первый лист и указатель на второй лист, идея сложения столбиком, на каждом шаге инитим слагаемое, если указатель не null (еще и двигаем заодно), считаем сумму с учетом переноса и перенос. В конце когда все закончилось, а перенос остался создаем новую ноду с переносом. В начале создаем заглушку dummy и возвращаем dummy.next
|
|
## Big-O
|
|
- Время ```O(max(N,M))```
|
|
- Память ```O(max(N,M))```
|
|
## Код
|
|
```Java
|
|
class Solution {
|
|
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
|
|
ListNode dummy = new ListNode(0), cur = dummy;
|
|
int carry = 0;
|
|
while (l1 != null || l2 != null || carry > 0) {
|
|
int a = (l1 != null) ? l1.val : 0;
|
|
int b = (l2 != null) ? l2.val : 0;
|
|
int sum = a + b + carry;
|
|
carry = sum / 10;
|
|
cur.next = new ListNode(sum % 10);
|
|
cur = cur.next;
|
|
if (l1 != null) l1 = l1.next;
|
|
if (l2 != null) l2 = l2.next;
|
|
}
|
|
return dummy.next;
|
|
}
|
|
}
|
|
``` |