Skip to content

Commit ff1bfa2

Browse files
committed
add delete
1 parent 0067bbc commit ff1bfa2

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed

SkipList.go

+27-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ func main() {
5858

5959
fmt.Println(search(sl, 11))
6060
fmt.Println(search(sl, 1))
61-
61+
fmt.Println(delete(sl, 1))
62+
fmt.Println(search(sl, 1))
6263
}
6364

6465
func insert(sl *SkipList, kv int) bool {
@@ -103,8 +104,32 @@ func insert(sl *SkipList, kv int) bool {
103104
return true
104105
}
105106

106-
func delete() {
107+
func delete(sl *SkipList, kv int) bool {
108+
update := make([]*node, MAX_LEVEL, MAX_LEVEL)
109+
p := sl.hnode
110+
111+
for i := sl.lv - 1; i >= 0; i-- {
112+
for p != nil && p.forward[i] != nil && p.forward[i].key < kv {
113+
p = p.forward[i]
114+
}
115+
update[i] = p
116+
}
107117

118+
if p.forward != nil && p.forward[0].key != kv {
119+
120+
return false
121+
}
122+
123+
deleteN := p.forward[0]
124+
for i := sl.lv - 1; i >= 0; i-- {
125+
if update[i] != nil && update[i].forward[i] == deleteN {
126+
update[i].forward[i] = deleteN.forward[i]
127+
if sl.hnode.forward[i] == nil {
128+
sl.lv--
129+
}
130+
}
131+
}
132+
return true
108133
}
109134

110135
func search(sl *SkipList, kv int) int {

0 commit comments

Comments
 (0)