Skip to content

Commit ddecade

Browse files
committed
二刷234
1 parent 5fcf9bf commit ddecade

File tree

7 files changed

+94
-18
lines changed

7 files changed

+94
-18
lines changed
Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,70 @@
11
[#0234-palindrome-linked-list]
2-
= 234. Palindrome Linked List
2+
= 234. 回文链表
33

4-
{leetcode}/problems/palindrome-linked-list/[LeetCode - Palindrome Linked List^]
4+
https://leetcode.cn/problems/palindrome-linked-list/[LeetCode - 234. 回文链表^]
55

6-
使用快慢指针将链表切成两段,然后对后面的一段进行反转,再逐个比较两个子链
6+
给你一个单链表的头节点 `head`,请你判断该链表是否为回文链表。如果是,返回 `true`;否则,返回 `false`
77

8-
Given a singly linked list, determine if it is a palindrome.
8+
*示例 1:*
99

10-
*Example 1:*
10+
image::images/0234-01.jpg[{image_attr}]
1111

12-
[subs="verbatim,quotes,macros"]
13-
----
14-
*Input:* 1->2
15-
*Output:* false
16-
----
12+
....
13+
输入:head = [1,2,2,1]
14+
输出:true
15+
....
1716

18-
*Example 2:*
17+
*示例 2:*
1918

20-
[subs="verbatim,quotes,macros"]
21-
----
22-
*Input:* 1->2->2->1
23-
*Output:* true
24-
----
19+
image::images/0234-02.jpg[{image_attr}]
20+
21+
....
22+
输入:head = [1,2]
23+
输出:false
24+
....
25+
26+
*提示:*
27+
28+
* 链表中节点数目在范围 `[1, 10^5^]`
29+
* `+0 <= Node.val <= 9+`
30+
31+
**进阶:**你能否用 `+O(n)+` 时间复杂度和 `+O(1)+` 空间复杂度解决此题?
2532

26-
*Follow up:*
2733

34+
== 思路分析
2835

29-
Could you do it in O(n) time and O(1) space?
36+
使用快慢指针找中间节点,会有如下两种情况:
3037

38+
image::images/0234-10.jpg[{image_attr}]
3139

40+
image::images/0234-11.jpg[{image_attr}]
41+
42+
然后,将链表后半部分翻转,再和前半部分做比较即可。
3243

3344
[[src-0234]]
45+
[tabs]
46+
====
47+
一刷::
48+
+
49+
--
3450
[{java_src_attr}]
3551
----
3652
include::{sourcedir}/_0234_PalindromeLinkedList.java[tag=answer]
3753
----
54+
--
55+
56+
二刷::
57+
+
58+
--
59+
[{java_src_attr}]
60+
----
61+
include::{sourcedir}/_0234_PalindromeLinkedList_2.java[tag=answer]
62+
----
63+
--
64+
====
65+
66+
67+
== 参考资料
3868

69+
. https://leetcode.cn/problems/palindrome-linked-list/solutions/2952645/o1-kong-jian-zuo-fa-xun-zhao-zhong-jian-rv0f3/[234. 回文链表 - O(1) 空间做法:寻找中间节点+反转链表^]
70+
. https://leetcode.cn/problems/palindrome-linked-list/solutions/457059/hui-wen-lian-biao-by-leetcode-solution/[234. 回文链表 - 官方题解^]

docs/images/0234-01.jpg

6.97 KB
Loading

docs/images/0234-02.jpg

3.49 KB
Loading

docs/images/0234-10.jpg

10.4 KB
Loading

docs/images/0234-11.jpg

12.2 KB
Loading

logbook/202503.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,6 +1774,11 @@ endif::[]
17741774
|{doc_base_url}/0236-lowest-common-ancestor-of-a-binary-tree.adoc[题解]
17751775
|✅ 深度优先遍历。找到或者到叶子节点就“触底反弹”,在“后根遍历”的位置处理递归调用的结果,分属左右子树则返回“当前根节点”,否则谁不为空返回谁。
17761776

1777+
|{counter:codes2503}
1778+
|{leetcode_base_url}/palindrome-linked-list/[234. 回文链表^]
1779+
|{doc_base_url}/0234-palindrome-linked-list.adoc[题解]
1780+
|✅ 快慢指针。使用快慢指针找到中间节点,翻转后半部分,再和前半部分比较即可。
1781+
17771782
|===
17781783

17791784
截止目前,本轮练习一共完成 {codes2503} 道题。
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import com.diguage.algo.util.ListNode;
4+
5+
public class _0234_PalindromeLinkedList_2 {
6+
// tag::answer[]
7+
/**
8+
* @author D瓜哥 · https://www.diguage.com
9+
* @since 2025-10-23 21:10:20
10+
*/
11+
public boolean isPalindrome(ListNode head) {
12+
ListNode slow = head, fast = head;
13+
while (fast != null && fast.next != null) {
14+
slow = slow.next;
15+
fast = fast.next.next;
16+
}
17+
ListNode tail = reverse(slow);
18+
while (tail != null) {
19+
if (head.val != tail.val) {
20+
return false;
21+
}
22+
head = head.next;
23+
tail = tail.next;
24+
}
25+
return true;
26+
}
27+
28+
private ListNode reverse(ListNode slow) {
29+
ListNode prev = null;
30+
while (slow != null) {
31+
ListNode next = slow.next;
32+
slow.next = prev;
33+
prev = slow;
34+
slow = next;
35+
}
36+
return prev;
37+
}
38+
// end::answer[]
39+
}

0 commit comments

Comments
 (0)