# 回文链表 ## 题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 提示: 链表中节点数目在范围[1, 105] 内 0 <= Node.val <= 9 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? ## 思路 - 初始化 - `ArrayList` - 双指针 - 左右对称判断 ## 代码 ```java /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public boolean isPalindrome(ListNode head) { // Special if (head == null) { return true; } // Init: ArrayList List list = new ArrayList<>(); // Traverse: Add Vals while (head != null) { list.add(head.val); head = head.next; } // Traverse: Judge int size = list.size(); for (int i = 0; i < size / 2; i++) { if (list.get(i) != list.get(size - i - 1)) { return false; } } return true; } } ```