Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit d83e122

Browse files
committed
add leetcode 234
1 parent 5df5648 commit d83e122

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

linkedlist/README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,4 +266,6 @@ gcc Quack.c revarg.c
266266
267267
[Leetcode 203 移除链表元素题解](linkedlist/leetcode203.md)
268268
269-
[Leetcode 2 两数相加](linkedlist/leetcode2.md)
269+
[Leetcode 2 两数相加](linkedlist/leetcode2.md)
270+
271+
[Leetcode 234 回文链表题解](linkedlist/leetcode234.md)

linkedlist/leetcode234.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
### 描述
2+
请判断一个链表是否为回文链表。
3+
4+
示例 1:
5+
6+
输入: 1->2
7+
输出: false
8+
示例 2:
9+
10+
输入: 1->2->2->1
11+
输出: true
12+
13+
[点击此处查看原题](https://leetcode-cn.com/problems/palindrome-linked-list/)
14+
15+
16+
### 思路
17+
18+
这个题目在难度分类是简单题,但是这题给我很多启发,个人认为应该属于中等题。
19+
题目有个进阶的要求是,能否在O(n)和O(1)的空间复杂度解决这个问题,首先我们考虑一种比较暴力的想法是,我们开一个数组,然后遍历一下这个链表,把值都抄进去,那么我们可以用双指针的方法来判断是不是回文了(因为单链表没法倒着来)。那么这里就不浪费时间在这个代码上,大家可以自行把代码写完。
20+
21+
这里想介绍一个递归的思路,然后加强一下自己对递归的理解。
22+
我们再次回顾一下递归,我们想一下反向打印字符串的代码。
23+
24+
假如我们有个char[],我们怎么反向打印呢?
25+
26+
我们可能可以想出答案:自底向上。
27+
28+
29+
```c
30+
void printArr(const char* str) {
31+
if (*str == '\0') {
32+
return;
33+
}
34+
printArr(str + 1);
35+
putchar(*str);
36+
}
37+
```
38+
举一反三, 栈帧可以帮助我们来从后往前,那我们只需要一个从前往后的指针就可以了。
39+
40+
```java
41+
class Solution {
42+
ListNode frontHead; // 从前往后的指针
43+
44+
public boolean recursiveCheck(ListNode head) {
45+
if (head != null) {
46+
if (!recursiveCheck(head.next)) return false; // 我们先摸到后面来
47+
if (head.val != frontHead.val) return false;
48+
frontHead = frontHead.next;
49+
}
50+
return true;
51+
}
52+
public boolean isPalindrome(ListNode head) {
53+
frontHead = head;
54+
return recursiveCheck(head);
55+
}
56+
}
57+
```
58+
59+
相信走到这里,对于递归的理解能加深不少。
60+
当然,这个解法也不是符合进阶要求的O(n)时间复杂度,O(1)空间复杂度的解法。
61+
大家有兴趣可以去探索一下。
62+
63+

0 commit comments

Comments
 (0)