Easy
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:
[1, 105]
.0 <= Node.val <= 9
Follow up: Could you do it in O(n)
time and O(1)
space?
; Definition for singly-linked list:
#|
; val : integer?
; next : (or/c list-node? #f)
(struct list-node
(val next) #:mutable #:transparent)
; constructor
(define (make-list-node [val 0])
(list-node val #f))
|#
(define (linked-list->numbers ll)
(if (not (list-node? ll))
'()
(append (list (list-node-val ll))
(linked-list->numbers (list-node-next ll)))))
(define (is-palindrome head)
(let ([numls (linked-list->numbers head)])
(equal? numls (reverse numls))))