@@ -15,62 +15,22 @@ type ListNode = structures.ListNode
15
15
* }
16
16
*/
17
17
18
- // 此题和 143 题 Reorder List 思路基本一致
19
18
func isPalindrome234 (head * ListNode ) bool {
20
- if head == nil || head .Next == nil {
21
- return true
22
- }
23
- res := true
24
- // 寻找中间结点
25
- p1 := head
26
- p2 := head
27
- for p2 .Next != nil && p2 .Next .Next != nil {
28
- p1 = p1 .Next
29
- p2 = p2 .Next .Next
30
- }
19
+ slice := []int {}
31
20
32
- // 反转链表后半部分 1->2->3->4->5->6 to 1->2->3->6->5->4
33
- preMiddle := p1
34
- preCurrent := p1 .Next
35
- for preCurrent .Next != nil {
36
- current := preCurrent .Next
37
- preCurrent .Next = current .Next
38
- current .Next = preMiddle .Next
39
- preMiddle .Next = current
21
+ for head != nil {
22
+ slice = append (slice , head .Val )
23
+ head = head .Next
40
24
}
41
25
42
- // 扫描表,判断是否是回文
43
- p1 = head
44
- p2 = preMiddle .Next
45
- // fmt.Printf("p1 = %v p2 = %v preMiddle = %v head = %v\n", p1.Val, p2.Val, preMiddle.Val, L2ss(head))
46
- for p1 != preMiddle {
47
- // fmt.Printf("*****p1 = %v p2 = %v preMiddle = %v head = %v\n", p1, p2, preMiddle, L2ss(head))
48
- if p1 .Val == p2 .Val {
49
- p1 = p1 .Next
50
- p2 = p2 .Next
51
- // fmt.Printf("-------p1 = %v p2 = %v preMiddle = %v head = %v\n", p1, p2, preMiddle, L2ss(head))
52
- } else {
53
- res = false
54
- break
55
- }
56
- }
57
- if p1 == preMiddle {
58
- if p2 != nil && p1 .Val != p2 .Val {
26
+ for i , j := 0 , len (slice )- 1 ; i < j ; {
27
+ if slice [i ] != slice [j ] {
59
28
return false
60
29
}
61
- }
62
-
63
- return res
64
- }
65
30
66
- // L2ss define
67
- func L2ss (head * ListNode ) []int {
68
- res := []int {}
69
-
70
- for head != nil {
71
- res = append (res , head .Val )
72
- head = head .Next
31
+ i ++
32
+ j --
73
33
}
74
34
75
- return res
35
+ return true
76
36
}
0 commit comments