Я пытаюсь добавить два списка или linklist
, используя javascript, вот ниже вопрос
Вам даны два связанных списка, представляющих два неотрицательных числа. Цифры хранятся в обратном порядке, и каждый из их узлов содержит один ди git. Добавьте два числа и верните их в виде связанного списка.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
342 + 465 = 807
Make sure there are no trailing zeros in the output list
So, 7 -> 0 -> 8 -> 0 is not a valid response even though the value is still 807.
Я пробовал вот так
function Node(data) {
this.data = data
this.next = null
}
let addTwoNumbers = function (A, B) {
let currentA = A,
currentB = B,
carry = 0,
root = null;
function addElementInNewLinkList(val, carry) {
if (root == null) {
root = new Node(val)
} else {
let temp = root;
while (temp.next !== null) {
temp = temp.next;
}
temp.next = new Node(val)
}
}
while (currentA != null || currentB != null) {
let sum = currentA && currentB ? currentA.data + currentB.data + carry: currentB?currentB+carry:currentA?currentA+carry:0;
if (sum > 10) {
carry = sum % 10;
sum = 0;
} else {
carry = 0
}
//create new linkList
addElementInNewLinkList(sum, carry);
if (currentA != null) currentA = currentA.next
if (currentB != null) currentB = currentB.next
}
return root
}
console.log(addTwoNumbers({"data": 9, "next": {"data": 9, "next": {"data": 1, "next": null}}}, {"data": 1, "next": null}))
Я получаю этот вывод
{"data":10,"next":{"data":"[object Object]0","next":{"data":"[object Object]0","next":null}}}
Я не знаю, где я делаю не так.
Мой подход Мой подход состоит из двух добавлений, если сумма больше 10, затем нести (используя остаток)
после рефакторинга .UPDATE
function Node(data) {
this.data = data
this.next = null
}
let addTwoNumbers = function (A, B) {
let currentA = A,
currentB = B,
carry = 0,
root = null;
function addElementInNewLinkList(val, carry) {
if (root == null) {
root = new Node(val)
} else {
let temp = root;
while (temp.next !== null) {
temp = temp.next;
}
temp = new Node(val)
}
}
while (currentA != null || currentB != null) {
let sum = currentA && currentB ? currentA.data + currentB.data + carry: currentB?currentB+carry:currentA?currentA+carry:0;
if (sum >= 10) {
carry = sum % 10;
sum = 0;
} else {
carry = 0
}
//create new linkList
addElementInNewLinkList(sum, carry);
if (currentA != null) currentA = currentA.next
if (currentB != null) currentB = currentB.next
}
console.log(JSON.stringify(root))
return root
}
Теперь я получаю этот
Узел {data: 0, next: null}