回文链表

给你一个单链表的头节点 head ,请你判断该链表是否为

回文链表

。如果是,返回 true ;否则,返回 false

示例 1:

img

1
2
输入:head = [1,2,2,1]
输出:true

示例 2:

img

1
2
输入:head = [1,2]
输出:false

提示:

  • 链表中节点数目在范围[1, 105]
  • 0 <= Node.val <= 9

进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?


将所有元素存起来用双指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> list = new ArrayList<>();
ListNode p = head;
while (p != null) {
list.add(p.val);
p = p.next;
}
int n = list.size();
for (int i = 0, j = n - 1; i < j; i++, j--) {
if (list.get(i) != list.get(j)) {
return false;
}
}
return true;
}
}