234. Palindrome Linked List
/**
* 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
*/
function isPalindrome($head) {
if ($head && $head->next == null){
return true;
}
$fast = $head;
$steps = 1;
$reverse = null;
while($head != null) {
if ($fast === null || $fast->next === null) {
if ($steps % 2 === 1) {
$head = $head->next;
$steps = 0;
}
if ($reverse->val !== $head->val) {
return false;
}
$reverse = $reverse->next;
$head = $head->next;
} else {
// recode steps
if ($fast->next->next ?? false) {
$steps += 2;
} elseif ($fast->next) {
$steps += 1;
}
$fast = $fast->next->next ?? null;
// reverse linked list
$nextHead = $head->next;
$head->next = $reverse;
$reverse = $head;
// slow pointer to next
$head = $nextHead;
}
}
return true;
}
}
Last updated