From d0fd932593b94f33154f64c053b9773a97ddd8cd Mon Sep 17 00:00:00 2001 From: Wonder Date: Fri, 3 Oct 2025 11:41:02 +0800 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=94=84Update:=20=E5=9B=9E=E6=96=87?= =?UTF-8?q?=E9=93=BE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 链表/3. 回文链表.md | 76 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 链表/3. 回文链表.md diff --git a/链表/3. 回文链表.md b/链表/3. 回文链表.md new file mode 100644 index 0000000..a915bba --- /dev/null +++ b/链表/3. 回文链表.md @@ -0,0 +1,76 @@ +# 回文链表 + +## 题目 + +给你一个单链表的头节点 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; + } +} +```