Skip to content

Commit cfb67ac

Browse files
authored
Merge pull request halfrost#156 from brenobaptista/refactored-234
Refactored solution 234
2 parents f663cec + 5e6c9b1 commit cfb67ac

File tree

1 file changed

+9
-49
lines changed

1 file changed

+9
-49
lines changed

leetcode/0234.Palindrome-Linked-List/234. Palindrome Linked List.go

Lines changed: 9 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -15,62 +15,22 @@ type ListNode = structures.ListNode
1515
* }
1616
*/
1717

18-
// 此题和 143 题 Reorder List 思路基本一致
1918
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{}
3120

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
4024
}
4125

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] {
5928
return false
6029
}
61-
}
62-
63-
return res
64-
}
6530

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--
7333
}
7434

75-
return res
35+
return true
7636
}

0 commit comments

Comments
 (0)