Skip to content

Commit b7f5bf8

Browse files
committed
双向链表开始
1 parent 1017c14 commit b7f5bf8

File tree

3 files changed

+138
-13
lines changed

3 files changed

+138
-13
lines changed
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/**
2+
* 双向链表
3+
*/
4+
5+
package list
6+
7+
import (
8+
// "errors"
9+
"fmt"
10+
)
11+
12+
// 节点对象
13+
type node struct {
14+
data interface{}
15+
prev *node
16+
next *node
17+
}
18+
19+
// 单链表对象:存储头节点即可
20+
type DoublyList struct {
21+
head *node // 双向链表表头,笔者这里表头用来存储个数
22+
tail *node // 双向链表表尾
23+
}
24+
25+
// 创建单链表
26+
func New() *DoublyList {
27+
head := &node{0, nil, nil,} // 头节点存储链表中元素的个数
28+
tail := &node{nil, head, nil}
29+
head.next = tail
30+
return &DoublyList{
31+
head,
32+
tail,
33+
}
34+
}
35+
36+
// 增加:末尾添加
37+
func (dl *DoublyList) Append(data interface{}){
38+
39+
var len int = 0
40+
len = dl.head.data.(int)
41+
42+
insertNode := &node{data, dl.tail, nil,} // 要插入的节点
43+
dl.tail = insertNode
44+
45+
len++
46+
dl.head.data = len
47+
48+
return
49+
}
50+
51+
// // 增加:任意位置插入结点
52+
// func (ll *RingList) Insert(index int, data interface{}) error{
53+
54+
// var len int = 0
55+
// len = ll.head.data.(int)
56+
57+
// if index < 1 || index > len {
58+
// return errors.New("index overflow")
59+
// }
60+
61+
// beforeNode := ll.head
62+
// appendNode := &node{data, nil}
63+
64+
// for i := 0; i < index - 1; i++ {
65+
// beforeNode = beforeNode.next // 找到要插入的位置的前置元素
66+
// }
67+
68+
// appendNode.next = beforeNode.next
69+
// beforeNode.next = appendNode
70+
71+
// len ++
72+
// ll.head.data = len
73+
74+
// return nil
75+
76+
// }
77+
78+
// // 删除:删除指定位置结点
79+
// func (ll *RingList) Delete(index int) (interface{}, error) {
80+
81+
// var len int = 0
82+
// len = ll.head.data.(int)
83+
84+
// if index < 0 || index >= len {
85+
// return nil,errors.New("index overflow")
86+
// }
87+
88+
// currentNode := ll.head
89+
// var beforeNode *node
90+
// var delData interface{} // 被删除的数据
91+
92+
// for i := 0; i < index; i++ {
93+
// beforeNode = currentNode
94+
// currentNode = currentNode.next
95+
// }
96+
97+
// beforeNode.next = currentNode.next
98+
// currentNode = nil
99+
100+
// len--
101+
// ll.head.data = len
102+
103+
// return delData, nil
104+
// }
105+
106+
// 打印链表
107+
func (dl *DoublyList) Show() {
108+
109+
var len int = 0
110+
len = dl.head.data.(int)
111+
112+
currentNode := dl.head
113+
114+
for i := 0; i <= len-1; i++ {
115+
fmt.Print(currentNode.data)
116+
if i == len - 1 {
117+
fmt.Print(" \n")
118+
} else {
119+
fmt.Print(" ")
120+
}
121+
122+
currentNode = currentNode.next
123+
}
124+
}

sources/go/list/RingList/RingList.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,18 +132,6 @@
132132
return currentNode.data, nil
133133
}
134134

135-
// 清空链表
136-
func (ll *RingList) Clear() {
137-
currentNode := ll.head.next
138-
for currentNode != nil {
139-
temp := currentNode.next
140-
currentNode = nil
141-
currentNode = temp
142-
}
143-
ll.head.data = 0
144-
ll.head.next = nil
145-
}
146-
147135
// 打印链表
148136
func (ll *RingList) Show() {
149137
var len int = 0

sources/go/main.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"algorithm/array"
55
SequenList "algorithm/list/SequenList"
66
LinkedList "algorithm/list/LinkedList"
7+
DoublyList "algorithm/list/DoublyList"
78
"fmt"
89
)
910

@@ -57,6 +58,16 @@ func testLinkedList() {
5758
fmt.Println(ll.Node(1))
5859
}
5960

61+
func testDoublyList() {
62+
63+
dl := DoublyList.New()
64+
dl.Show()
65+
66+
dl.Append(7)
67+
dl.Show()
68+
69+
}
70+
6071
func main() {
6172

6273
fmt.Println("start run...")
@@ -65,6 +76,8 @@ func main() {
6576

6677
// testSequenList() // 测试顺序表
6778

68-
testLinkedList() // 测试单链表
79+
// testLinkedList() // 测试单链表
80+
81+
testDoublyList() // 测试双向链表
6982

7083
}

0 commit comments

Comments
 (0)