Рубрики
Без рубрики

Дорога к Genius: Улучшенный # 65

Каждый день я решаю несколько вызовов кодирования и головоломки из рейтингового режима CODR. Цель состоит в том, чтобы достичь … Теги с JavaScript, начинающими, CodeNewie, информатики.

Каждый день я решаю несколько вызовов кодирования и головоломки из рейтингового режима 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”