Я не собираюсь запускать ваш код, потому что он не завершен. Однако, похоже, что вы нашли последний элемент списка и перевернули его оттуда, не принимая во внимание, что он также переворачивает список, на который вы уже ссылаетесь с помощью head
. Поэтому, когда вы начинаете сравнение l oop, у вас есть указатель на первый элемент в обращенном списке и указатель на последний элемент в обращенном списке. Вы определенно не разделяете список на две части.
Ваш код также слишком сложен. Правильный алгоритм:
find head and tail of list
while (head != tail) {
if (head.value != tail.value)
return false;
head = head.next;
tail = tail.prev;
}
Вам не нужны две переменные l oop, чтобы найти хвост связанного списка. Правильный алгоритм:
tail = head
while (tail.next != null) {
tail = tail.next;
}
Кроме того, вы не можете вообще сравнивать целые числа с оператором равенства. Вы должны либо распаковать их в примитивные целые, либо использовать равные. Попробуйте запустить:
System.err.println(new Integer(1) == new Integer(1));
System.err.println(new Integer(1).equals(new Integer(1)));