LeetCode-in-All

234. Palindrome Linked List

Easy

Given the head of a singly linked list, return true if it is a palindrome.

Example 1:

Input: head = [1,2,2,1]

Output: true

Example 2:

Input: head = [1,2]

Output: false

Constraints:

Follow up: Could you do it in O(n) time and O(1) space?

Solution

/**
 * Definition for a singly-linked list.
 * class ListNode {
 *     public $val = 0;
 *     public $next = null;
 *     function __construct($val = 0, $next = null) {
 *         $this->val = $val;
 *         $this->next = $next;
 *     }
 * }
 */
class Solution {
    /**
     * @param ListNode $head
     * @return Boolean
     */
    public function isPalindrome($head) {
        $array = [];
        while ($head) {
            $array[] = $head->val;
            $head = $head->next;
        }
        $cnt = count($array);
        for ($x = 0; $x < $cnt / 2; $x++) {
            $yKey = $cnt - 1 - $x;

            if ($array[$x] !== $array[$yKey]) {
                return false;
            }
        }
        return true;
    }
}