Skip to content
This repository was archived by the owner on Sep 20, 2023. It is now read-only.

Commit 4fec706

Browse files
aQuaaQua
aQua
authored and
aQua
committed
finish Problem 206
做25题的时候,需要逆转链,发现这正好就是206题,就先把206解决了.
1 parent 5dfb395 commit 4fec706

File tree

5 files changed

+97
-11
lines changed

5 files changed

+97
-11
lines changed

Algorithms/0025.reverse-nodes-in-k-group/reverse-nodes-in-k-group.go

+26-1
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,34 @@ func reverseKGroup(head *ListNode, k int) *ListNode {
1111

1212
return nil
1313
}
14+
func canReverse(head *ListNode, k int) (*ListNode, bool) {
15+
for head != nil {
16+
k--
17+
if k == 0 {
18+
return head.Next, true
19+
}
20+
}
21+
return nil, false
22+
}
23+
24+
func reverse(head *ListNode) (first, last *ListNode) {
25+
if head == nil || head.Next == nil {
26+
return head, nil
27+
}
28+
if head.Next.Next == nil {
29+
last = head
30+
first = head.Next
31+
first.Next = last
32+
}
33+
var temp *ListNode
34+
last = head
35+
first, temp = reverse(head.Next)
36+
temp.Next = last
37+
//last.Next = nil
38+
return first, last
39+
}
1440

1541
// ListNode 是链接节点
16-
// 这个不能复制到*_test.go文件中。会导致Travis失败
1742
type ListNode struct {
1843
Val int
1944
Next *ListNode

Algorithms/0025.reverse-nodes-in-k-group/reverse-nodes-in-k-group_test.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,15 @@ func Test_Problem0025(t *testing.T) {
4545
a, p := q.ans, q.para
4646
fmt.Printf("~~%v~~\n", p)
4747

48-
ast.Equal(a.one, l2s(reverseKGroup(s2l (p.one),p.two)), "输入:%v", p)
48+
ast.Equal(a.one, l2s(reverseKGroup(s2l(p.one), p.two)), "输入:%v", p)
4949
}
5050
}
5151

52+
func Test_reverse(t *testing.T) {
53+
head, _ := reverse(s2l([]int{1, 2, 3}))
54+
assert.Equal(t, []int{3, 2, 1}, l2s(head), "无法逆转链")
55+
}
56+
5257
// convert *ListNode to []int
5358
func l2s(head *ListNode) []int {
5459
res := []int{}

Algorithms/0206.reverse-linked-list/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# [206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/)
22

33
## 题目
4-
4+
Reverse a singly linked list.
55

66
## 解题思路
7-
7+
详见注释
88

99
## 总结
1010

Original file line numberDiff line numberDiff line change
@@ -1,2 +1,26 @@
11
package Problem0206
22

3+
func reverseList(head *ListNode) *ListNode {
4+
// prev 是所有已经逆转的节点的head
5+
var prev *ListNode
6+
7+
// head 是下一个被逆转的节点
8+
for head != nil {
9+
// 让temp指向head.Next, 免得head.Next不见了.
10+
temp := head.Next
11+
// head称为已经逆转的节点的新head
12+
head.Next = prev
13+
// 让prev重新称为所有已被逆转节点的head
14+
prev = head
15+
// 让head指向下一个被逆转的节点
16+
head = temp
17+
}
18+
19+
return prev
20+
}
21+
22+
// ListNode 是链接节点
23+
type ListNode struct {
24+
Val int
25+
Next *ListNode
26+
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package Problem0206
22

33
import (
4-
"testing"
54
"fmt"
5+
"testing"
66

77
"github.com/stretchr/testify/assert"
88
)
@@ -15,13 +15,13 @@ type question struct {
1515
// para 是参数
1616
// one 代表第一个参数
1717
type para struct {
18-
one string
18+
one []int
1919
}
2020

2121
// ans 是答案
2222
// one 代表第一个答案
2323
type ans struct {
24-
one string
24+
one []int
2525
}
2626

2727
func Test_Problem0206(t *testing.T) {
@@ -30,17 +30,49 @@ func Test_Problem0206(t *testing.T) {
3030
qs := []question{
3131

3232
question{
33-
para{""},
34-
ans{""},
33+
para{[]int{1, 2, 3, 4, 5}},
34+
ans{[]int{5, 4, 3, 2, 1}},
3535
},
36-
36+
3737
// 如需多个测试,可以复制上方元素。
3838
}
3939

4040
for _, q := range qs {
4141
a, p := q.ans, q.para
4242
fmt.Printf("~~%v~~\n", p)
4343

44-
ast.Equal(a.one, (p.one), "输入:%v", p)
44+
ast.Equal(a.one, l2s(reverseList(s2l(p.one))), "输入:%v", p)
45+
}
46+
}
47+
48+
// convert *ListNode to []int
49+
func l2s(head *ListNode) []int {
50+
res := []int{}
51+
52+
for head != nil {
53+
res = append(res, head.Val)
54+
head = head.Next
4555
}
56+
57+
return res
58+
}
59+
60+
// convert []int to *ListNode
61+
func s2l(nums []int) *ListNode {
62+
if len(nums) == 0 {
63+
return nil
64+
}
65+
66+
res := &ListNode{
67+
Val: nums[0],
68+
}
69+
temp := res
70+
for i := 1; i < len(nums); i++ {
71+
temp.Next = &ListNode{
72+
Val: nums[i],
73+
}
74+
temp = temp.Next
75+
}
76+
77+
return res
4678
}

0 commit comments

Comments
 (0)