Внутри первого, пока l oop вы нажимаете l.value , но l не увеличивается, поэтому оно возвращает то же значение в arr .
Теперь у вас есть обр , который, как предполагается, равен l в обратном порядке. Во втором, пока l oop, вместо использования arr.shift () используйте arr.pop () . Это удалит первый элемент из стека arr . Помните, что стек входит первым, последним выходит.
Обратите также внимание на то, что когда вы сравниваете список спереди и сзади, вы достигаете точки нерелевантности, половины пути. Как только вы узнаете, что половина значений в списке пересылки совпадают со значениями в списке пересылки, вы знаете, что остальные пройдут тест.
Вот как это должно выглядеть. Вы должны попытаться выяснить, как сделать ставку самостоятельно.
function isListPalindrome(l) {
let curr = l;
let arr = [];
if (l == null)
return true;
// push all elements of l into the stack.
// a stack in JS is an array.
while(curr != null){
arr.push(curr.value);
// move ahead:
curr = curr.next;
}
let curr2 = l;
let length = arr.length;
// Traverse the list again & check by popping from the stack:
while(curr2 != null){
// get the top most element on the stack:
let lastNum = arr.pop();
// check if the node data isn't the same as the element popped:
if (curr2.value != lastNum){
return false;
}
// Half way point for evens
if (length / 2 === arr.length) {
return true;
}
// move ahead:
curr2 = curr2.next;
}
return true;
}