@@ -41,7 +41,7 @@ private int getRandom() {
41
41
}
42
42
43
43
private void insertValueProbablistically (T value ) {
44
- int level = getRandom ()+ 1 ;
44
+ int level = getRandom ();
45
45
Node <T > node = new Node <T >(level ,value );
46
46
47
47
// Insert
@@ -52,7 +52,7 @@ private void insertValueProbablistically(T value) {
52
52
head .value = value ;
53
53
node .value = oldHeadValue ;
54
54
}
55
- for (int i =level - 1 ; i >=0 ; i --) {
55
+ for (int i =level ; i >=0 ; i --) {
56
56
Node <T > next = prev .getNext (i );
57
57
while (next !=null ) {
58
58
if (next .value .compareTo (value )==1 ) break ;
@@ -91,11 +91,11 @@ private Node<T> findNode(T value) {
91
91
92
92
// Current node is not the node we are looking for. Keep moving down
93
93
// until you find a node with a "next" node.
94
- int level = node .next . length - 1 ;
94
+ int level = node .getLevel () ;
95
95
Node <T > next = node .getNext (level );
96
96
while (next ==null ) {
97
97
// If next is null, move down
98
- if (level >0 ) next = node .next [ --level ] ;
98
+ if (level >0 ) next = node .getNext ( --level ) ;
99
99
else break ;
100
100
}
101
101
@@ -144,8 +144,8 @@ public boolean remove(T value) {
144
144
head = null ;
145
145
}
146
146
}
147
- int levels = node .next . length ;
148
- for (int i =levels - 1 ; i >=0 ; i --) {
147
+ int level = node .getLevel () ;
148
+ for (int i =level ; i >=0 ; i --) {
149
149
prev = node .getPrev (i );
150
150
next = node .getNext (i );
151
151
if (prev != null )
@@ -181,8 +181,8 @@ public boolean validate() {
181
181
Node <T > node = head ;
182
182
if (node ==null ) return true ;
183
183
184
- int levels = node .next . length ;
185
- for (int i = levels - 1 ; i >= 0 ; i --) {
184
+ int level = node .getLevel () ;
185
+ for (int i = level ; i >= 0 ; i --) {
186
186
Node <T > prev = null ;
187
187
while (node != null ) {
188
188
// The list should be ordered
@@ -224,8 +224,8 @@ public String getString(T value, int level) {
224
224
builder .append ("size=" ).append (size ).append ("\n " );
225
225
Node <T > node = head ;
226
226
if (node !=null ) {
227
- int levels = node .next . length ;
228
- for (int i =levels - 1 ; i >=0 ; i --) {
227
+ int iLevel = node .getLevel () ;
228
+ for (int i =iLevel ; i >=0 ; i --) {
229
229
builder .append ("[" ).append (i ).append ("] " );
230
230
node = head ;
231
231
while (node != null ) {
@@ -259,11 +259,15 @@ private static final class Node<T extends Comparable<T>> {
259
259
private T value = null ;
260
260
261
261
private Node (int level , T data ) {
262
- this .prev = new Node [level ];
263
- this .next = new Node [level ];
262
+ this .prev = new Node [level + 1 ];
263
+ this .next = new Node [level + 1 ];
264
264
this .value = data ;
265
265
}
266
266
267
+ private int getLevel () {
268
+ return prev .length -1 ;
269
+ }
270
+
267
271
private void setNext (int idx , Node <T > node ) {
268
272
this .next [idx ] = node ;
269
273
}
0 commit comments