File tree 1 file changed +27
-2
lines changed
1 file changed +27
-2
lines changed Original file line number Diff line number Diff line change @@ -58,7 +58,8 @@ func main() {
58
58
59
59
fmt .Println (search (sl , 11 ))
60
60
fmt .Println (search (sl , 1 ))
61
-
61
+ fmt .Println (delete (sl , 1 ))
62
+ fmt .Println (search (sl , 1 ))
62
63
}
63
64
64
65
func insert (sl * SkipList , kv int ) bool {
@@ -103,8 +104,32 @@ func insert(sl *SkipList, kv int) bool {
103
104
return true
104
105
}
105
106
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
+ }
107
117
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
108
133
}
109
134
110
135
func search (sl * SkipList , kv int ) int {
You can’t perform that action at this time.
0 commit comments