Files
LeetCode/链表/3. 回文链表.md
T
2025-10-03 11:41:02 +08:00

77 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 回文链表
## 题目
给你一个单链表的头节点 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<Integer> 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;
}
}
```