Leetcode #234 | #Easy | [Связный список](../../Структуры/Связный%20список.md) | [Два указателя](../../Методы/Два%20указателя.md) | [Быстрый и медленный указатели](../../Методы/Быстрый%20и%20медленный%20указатели.md) | [Стек](../../Структуры/Стек.md) ## Идея Вариант 1. Через стек Вариант 2. За O(1) по памяти. Находим середину, разворачиваем вторую половину списка и сравниваем двумя указателями ## Big-O - Время ```O(N)``` - Память ```O(1)``` ## Код ```Java class Solution { public boolean isPalindrome(ListNode head) { if (head == null || head.next == null) return true; ListNode slow = head, fast = head; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } ListNode prev = slow, cur = slow.next; while (cur != null) { ListNode next = cur.next; cur.next = prev; prev = cur; cur = next; } ListNode middle = slow; while (head != middle) { if (head.val != prev.val) return false; head = head.next; prev = prev.next; } return true; } } ```