Сложность: hard
Дано неотрицательное целое число, представленное в виде связного списка цифр. Добавить к этому числу единицу.
Цифры хранятся таким образом, что самая значимая цифра находится в начале списка.
Пример:
Input: head = [1,2,3]
Output: [1,2,4]
👨💻 Алгоритм:
1⃣Инициализируйте стражевой узел как ListNode(0) и установите его как новую голову списка: sentinel.next = head. Найдите крайний правый элемент, не равный девяти.
2⃣Увеличьте найденную цифру на единицу и установите все следующие девятки в ноль.
3⃣Верните sentinel, если его значение было установлено на 1, иначе верните head (sentinel.next).
😎 Решение:
class ListNode {
constructor(val = 0, next = null) {
this.val = val;
this.next = next;
}
}
class Solution {
plusOne(head) {
let sentinel = new ListNode(0);
sentinel.next = head;
let notNine = sentinel;
let current = head;
while (current !== null) {
if (current.val !== 9) {
notNine = current;
}
current = current.next;
}
notNine.val += 1;
notNine = notNine.next;
while (notNine !== null) {
notNine.val = 0;
notNine = notNine.next;
}
return sentinel.val === 0 ? sentinel.next : sentinel;
}
}Ставь 👍 и забирай 📚 Базу знаний
