Добавить в корзинуПозвонить
Найти в Дзене
Skill Up In IT

2. Add Two Numbers

#Linked List#Math#Recursion Вам даны два непустых связанных списка, представляющих два неотрицательных целых числа. Цифры хранятся в обратном порядке , и каждый из их узлов содержит одну цифру. Сложите два числа и верните сумму в виде связанного списка. Вы можете предположить, что эти два числа не содержат начальных нулей, за исключением самого числа 0. Пример 1: Вход: l1 = [2,4,3], l2 = [5,6,4]
Выход: [7,0,8]
Объяснение: 342 + 465 = 807. Пример 2: Вход: l1 = [0], l2 = [0]
Выход: [0] Пример 3: Вход: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Выход: [8,9,9,9,0,0,0,1] Ограничения: пример решения на go /** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */ func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { dummyHead := &ListNode{}
current := dummyHead
carry := 0
for l1 != nil || l2 != nil || carry != 0 {
sum := carry
if l1 != nil {
sum += l1.Val
l1 = l1.Next
}

#Linked List#Math#Recursion

Вам даны два непустых связанных списка, представляющих два неотрицательных целых числа. Цифры хранятся в обратном порядке , и каждый из их узлов содержит одну цифру. Сложите два числа и верните сумму в виде связанного списка.

Вы можете предположить, что эти два числа не содержат начальных нулей, за исключением самого числа 0.

Пример 1:

Вход: l1 = [2,4,3], l2 = [5,6,4]
Выход: [7,0,8]
Объяснение: 342 + 465 = 807.

Пример 2:

Вход: l1 = [0], l2 = [0]
Выход: [0]

Пример 3:

Вход: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
Выход: [8,9,9,9,0,0,0,1]

Ограничения:

  • Количество узлов в каждом связанном списке находится в диапазоне [1, 100].
  • 0 <= Node.val <= 9
  • Гарантируется, что список представляет собой число, не имеющее начальных нулей.

пример решения на go

/**
* Definition for singly-linked list.
* type ListNode struct {
*     Val int
*     Next *ListNode
* }
*/
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
dummyHead := &ListNode{}

current := dummyHead
carry := 0

for l1 != nil || l2 != nil || carry != 0 {
sum := carry

if l1 != nil {
sum += l1.Val
l1 = l1.Next
}

if l2 != nil {
sum += l2.Val
l2 = l2.Next
}

carry = sum / 10
current.Next = &ListNode{Val: sum % 10}
current = current.Next
}

return dummyHead.Next
}