package
0.0.0-20241220153043-cbee1828b161
Repository: https://github.com/alivewel/go.git
Documentation: pkg.go.dev
# README
Задача из leetcode под названием "Add Two Numbers".
Здесь на вход приходят 2 неотрицательных числа в виде связного списка. Цифры хранятся в обратном порядке. Необходимо сложить 2 числа и вернуть результат в виде связного списка.
Решение
В решении мы имитируем сложение числа в столбик. Проходимся по разрядам, складываем числа и, если полученное число больше 9, записываем оставшуюся часть в остаток carry
. В цикле проходимся до тех пор пока у нас есть остаток или есть узлы в списках a
и b
. Результат возвращается в виде head.Next
, потому что первый узел фиктивный и в нем хранится zero value - 0
, его мы пропускаем.
func addTwoNumbers(a, b *ListNode) *ListNode {
res := &ListNode{}
head := res
sum, carry := 0, 0
for a != nil || b != nil || carry != 0 {
sum = carry
if a != nil {
sum += a.Val
a = a.Next
}
if b != nil {
sum += b.Val
b = b.Next
}
carry = sum / 10
res.Next = &ListNode{sum % 10, nil}
res = res.Next
}
return head.Next
}