Skip to content

Commit 995a5ce

Browse files
author
phishman3579
committed
Minor updates to Skip List, still trying to find the cause of the large "add" times.
git-svn-id: https://java-algorithms-implementation.googlecode.com/svn/trunk@422 032fbc0f-8cab-eb90-e552-f08422b9a96a
1 parent 2efc1d4 commit 995a5ce

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

src/com/jwetherell/algorithms/data_structures/SkipList.java

+16-12
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ private int getRandom() {
4141
}
4242

4343
private void insertValueProbablistically(T value) {
44-
int level = getRandom()+1;
44+
int level = getRandom();
4545
Node<T> node = new Node<T>(level,value);
4646

4747
// Insert
@@ -52,7 +52,7 @@ private void insertValueProbablistically(T value) {
5252
head.value = value;
5353
node.value = oldHeadValue;
5454
}
55-
for (int i=level-1; i>=0; i--) {
55+
for (int i=level; i>=0; i--) {
5656
Node<T> next = prev.getNext(i);
5757
while (next!=null) {
5858
if (next.value.compareTo(value)==1) break;
@@ -91,11 +91,11 @@ private Node<T> findNode(T value) {
9191

9292
// Current node is not the node we are looking for. Keep moving down
9393
// until you find a node with a "next" node.
94-
int level = node.next.length-1;
94+
int level = node.getLevel();
9595
Node<T> next = node.getNext(level);
9696
while (next==null) {
9797
// If next is null, move down
98-
if (level>0) next = node.next[--level];
98+
if (level>0) next = node.getNext(--level);
9999
else break;
100100
}
101101

@@ -144,8 +144,8 @@ public boolean remove(T value) {
144144
head = null;
145145
}
146146
}
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--) {
149149
prev = node.getPrev(i);
150150
next = node.getNext(i);
151151
if (prev != null)
@@ -181,8 +181,8 @@ public boolean validate() {
181181
Node<T> node = head;
182182
if (node==null) return true;
183183

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--) {
186186
Node<T> prev = null;
187187
while (node != null) {
188188
// The list should be ordered
@@ -224,8 +224,8 @@ public String getString(T value, int level) {
224224
builder.append("size=").append(size).append("\n");
225225
Node<T> node = head;
226226
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--) {
229229
builder.append("[").append(i).append("] ");
230230
node = head;
231231
while (node != null) {
@@ -259,11 +259,15 @@ private static final class Node<T extends Comparable<T>> {
259259
private T value = null;
260260

261261
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];
264264
this.value = data;
265265
}
266266

267+
private int getLevel() {
268+
return prev.length-1;
269+
}
270+
267271
private void setNext(int idx, Node<T> node) {
268272
this.next[idx] = node;
269273
}

0 commit comments

Comments
 (0)