Skip to content

Commit 0067bbc

Browse files
committed
fix insert,search
1 parent 228c8c9 commit 0067bbc

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

SkipList.go

+29-18
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,15 @@ func main() {
5050
fmt.Println("skip list", data)
5151

5252
sl := createSkipList()
53-
fmt.Println(sl.hnode.forward)
53+
54+
fmt.Println(sl, sl.hnode.forward)
55+
for i := 0; i < 10; i++ {
56+
insert(sl, i)
57+
}
58+
59+
fmt.Println(search(sl, 11))
60+
fmt.Println(search(sl, 1))
61+
5462
}
5563

5664
func insert(sl *SkipList, kv int) bool {
@@ -60,20 +68,20 @@ func insert(sl *SkipList, kv int) bool {
6068
p = sl.hnode
6169
k := sl.lv
6270

63-
for i := k - 1; i >= 0; i-- {
64-
q = p.forward[i]
65-
for q.key < kv {
66-
p = q
71+
for i := k - 1; i >= 0; i-- { //loop level
72+
for p != nil && p.forward[i] != nil && p.forward[i].key < kv {
73+
p = p.forward[i]
6774
}
6875
update[i] = p
6976
}
7077

71-
//插入数据相同 直接返回false
72-
if q != nil && q.key == kv {
78+
if p != nil && p.key == kv {
7379
return false
7480
}
7581

7682
k = randomLevel()
83+
84+
//update hnode forword pointer
7785
if k > sl.lv {
7886
for i := sl.lv; i < k; i++ {
7987
update[i] = sl.hnode
@@ -82,9 +90,14 @@ func insert(sl *SkipList, kv int) bool {
8290
}
8391

8492
q = createNode(k, kv)
93+
8594
for i := 0; i < k; i++ {
86-
q.forward[i] = update[i].forward[i]
87-
update[i].forward[i] = q
95+
if update[i] != nil {
96+
q.forward[i] = update[i].forward[i]
97+
update[i].forward[i] = q
98+
} else {
99+
100+
}
88101
}
89102

90103
return true
@@ -95,16 +108,14 @@ func delete() {
95108
}
96109

97110
func search(sl *SkipList, kv int) int {
98-
var p, q *node
99-
p = sl.hnode
100-
k := sl.lv
101-
for i := k - 1; i >= 0; i-- {
102-
q = p.forward[i]
103-
for q.key <= kv {
104-
if q.key == kv {
105-
return q.key
111+
var q *node
112+
q = sl.hnode
113+
for i := sl.lv - 1; i >= 0; i-- {
114+
for q != nil && q.forward[i] != nil && q.forward[i].key <= kv {
115+
if q.forward[i].key == kv {
116+
return q.forward[i].key
106117
}
107-
p = q
118+
q = q.forward[i]
108119
}
109120
}
110121
return -1

0 commit comments

Comments
 (0)