Каждый день я решаю несколько вызовов кодирования и головоломки из рейтингового режима CODR. Цель состоит в том, чтобы достичь гениального ранга, по тому, как я объясню, как я их решаю. Вам не нужен какой-либо программный фон для начала, и вы узнаете тонну новых и интересных вещей, как вы идете.
function Node(val) { this.val = val; this.next = null; } function myst(cur1, cur2) { if (cur1 === null || cur2 === null) return null; let head = new Node(0) let cur = head let carry = 0 while (cur1 !== null || cur2 !== null) { let val1 = cur1 !== null ? cur1.val : 0 let val2 = cur2 !== null ? cur2.val : 0 let sum = val1 + val2 + carry let newNode = new Node(sum % 10) carry = sum >= 10 ? 1 : 0 cur.next = newNode cur = cur.next if (cur1 !== null) cur1 = cur1.next if (cur2 !== null) cur2 = cur2.next } if (carry > 0) cur.next = new Node(carry) return head.next }; let x = new Node(9) x.next = new Node(6) x.next.next = new Node(1) let y = new Node(7) y.next = new Node(8) y.next.next = new Node(1) let out = myst(x, y); let A = out.val; while (out.next) { A += out.val; out = out.next } // A = ? (number)
Вот вызов, который мы не столкнулись раньше. Похоже, это связано с связанными списками, если вы новичны для программирования, это важная структура данных для изучения.
Этот код создает два отдельных связанных списка х
и y
(в конце кода). Тогда какая-то загадочная функция Myst
называется использованием х
и y
как аргументы. Наконец переменная А
вычисляется в зависимости от вывода Myst
Отказ
Базовая структура связанных списков – это Узел
Отказ Простой узел содержит некоторое значение и указатель на следующий узел. Связанный список – это просто цепочка узлов:
Теперь, когда вы понимаете связанные списки, давайте проанализируем функцию мистика
. Он принимает два связанных списка и итает их обоих из головы к хвосту. Это создает новый связанный список голова
чьи значения узлов вычисляются сумма
:
let sum = val1 + val2 + carry let newNode = new Node(sum % 10) carry = sum >= 10 ? 1 : 0
Давайте проиллюстрируем весь этот процесс в псевдокоде:
x => (9) -> (6) -> (1) -> END y => (7) -> (8) -> (1) -> END myst(x, y) head => (0) -> END carry = 0 while : sum = (9 + 7 + 0) % 10 = 6 newNode => (6) -> END carry = 1 head => (0) -> (6) -> END sum = (6 + 8 + 1) % 10 = 5 newNode => (5) -> END carry = 1 head => (0) -> (6) -> (5) -> END sum = (1 + 1 + 1) % 10 = 3 newNode => (6) -> END carry = 0 head => (0) -> (6) -> (5) -> (3) -> END return head.next out => (6) -> (5) -> (3) -> END A = 6 while: A += 6 A += 5 //// A += 3 is not done because that node's "next" points to END (null) A == 17
Решив эти проблемы, вы тренируетесь, чтобы быть лучшим программистом. Вы узнаете новых и лучших способов анализа, отладки и улучшения кода. В результате вы будете более продуктивными и ценными в бизнесе. Начните и станьте сертифицированным CODR сегодня в https://nevolin.be/codr/
Оригинал: “https://dev.to/codr/road-to-genius-superior-65-1n1g”