Зацініть ще такий алгоритм.
Нам було б добре розділити той список на дві рівні частини, а потім змінити напрямок зв'язків в одній половині, і пройтися відразу по обом половинам, порівнюючи їхні значення.
Але виникає питання, як нам знайти першу половину списку, якшо ми не знаємо довжини? Можна спершу пройтися по всім ланкам, порахувати їхню кількість, а потім пройтися знову, але лише до половини кількості.
А чи можна це зробити в один прохід? Можна.
let slow = head;
let fast = head;
//finding middle node
while(fast !== null && fast.next !== null){
fast = fast.next.next;
slow = slow.next;
}
хіба не це прекольно?