Добавление двух связанных списков и вывод результата в новом обсуждении связанного списка в javascript - PullRequest
0 голосов
/ 04 февраля 2019

Вопрос:

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

Можно предположить, что два числа не содержат начального нуля, кроме самого номера 0.

Пример:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

Предлагаемое решение:

function ListNode(val) {
  this.val = val;
  this.next = null;
}

// adding two Linked Lists.
var addTwoNumbers = function(l1, l2) {
 const temp = new ListNode(0);
 let resultPointer = temp;
 var digit = 0;
 var carryover = 0;
 while(
   l1!== null ||
   l2 !== null
  ){
    var sum = 0;
    if(l1!== null){
      sum += l1.val;
      l1 = l1.next;           
    }

    if(l2!== null){
      sum += l2.val;
      l2 = l2.next;
    }

    sum = sum + carryover;
    carryover = sum >= 10 ? 1 : 0;
    resultPointer.next = new ListNode(sum % 10);
    resultPointer = resultPointer.next;
 }
  return temp.next;    
};

Вывод: [7,0,8];

Почему следующее изменение выводит список [].

       let resultPointer = new ListNode(0);
       return resultPointer.next();

Любые предложения будут полезны.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Примечание: это не ответ!

В вашем коде что-то не так;Вы должны добавить другое измерение, иначе, если у вас есть перенос после добавления последней цифры, это даст неверный результат;

9 8

2 2

Результат: 20

Ибо, чтобы преодолеть эту ошибку, вам нужно добавить последний перенос в списке;

if((sum/10) !== 0){
      resultPointer.next = new ListNode(sum / 10);
      resultPointer = resultPointer.next;
}

это добавит последний перенос в списке;

0 голосов
/ 04 февраля 2019

Когда вы объявляете

let resultPointer = new ListNode(0);

Создает новый связанный список.Он не имеет никакого отношения к temp.Затем, после выполнения цикла while, ваш resultPointer указывает на последнюю запись в этом списке, и у него нет связанного списка в дополнение к этому указателю.Поэтому, когда вы возвращаете resultPointer.next() - это на самом деле пустой список.

Наоборот - в предложенном вами решении temp на самом деле является заголовком связанного списка.Для итерации - используется resultPointer.Таким образом, даже после выполнения цикла while, 1011 * остается главой связанного списка.Таким образом, возвращение temp.next() на самом деле возвращает список дальше к этой голове связанного списка.

Надеюсь, что это поможет.

...