Description
Given the head
of a singly linked list, return true
if it is a
palindrome
or false
otherwise.
Example 1:
Input: head = [1,2,2,1]
Output: true
Example 2:
Input: head = [1,2]
Output: false
Constraints:
- The number of nodes in the list is in the range
[1, 105]
.
0 <= Node.val <= 9
Follow up: Could you do it in O(n)
time and O(1)
space?
Code
看到 palindrome,第一直覺是使用 stack,第二直覺是使用 slow & fast pointer 來找出 linked list 的一半在哪邊。
Stack + Slow & Fast Pointer
Time Complexity: O(N), Space Complexity: O(N)
slow & fast pointer + reversed linked list
不使用 stack 的解法,一樣使用 slow fast pointer,並將後半段的 linked list 反轉。
Time Complexity: O(N), Space Complexity: O(1)
Source