From d14a5d1eed14ca9aee01e2f775c7a3128ef20659 Mon Sep 17 00:00:00 2001 From: Artem Boiarshinov <54187376+Boiarshinov@users.noreply.github.com> Date: Wed, 22 Jun 2022 16:56:35 +0300 Subject: [PATCH] Fix SkipList remove operation (#3160) --- .../datastructures/lists/SkipList.java | 4 +++- .../datastructures/lists/SkipListTest.java | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/thealgorithms/datastructures/lists/SkipList.java b/src/main/java/com/thealgorithms/datastructures/lists/SkipList.java index 5cd14f9dd..259406e22 100644 --- a/src/main/java/com/thealgorithms/datastructures/lists/SkipList.java +++ b/src/main/java/com/thealgorithms/datastructures/lists/SkipList.java @@ -117,7 +117,9 @@ public class SkipList> { } for (int i = 0; i <= layer; i++) { current.previous(i).setNext(i, current.next(i)); - current.next(i).setPrevious(i, current.previous(i)); + if (current.next(i) != null) { + current.next(i).setPrevious(i, current.previous(i)); + } } size--; } diff --git a/src/test/java/com/thealgorithms/datastructures/lists/SkipListTest.java b/src/test/java/com/thealgorithms/datastructures/lists/SkipListTest.java index b26de0c55..1bbe11527 100644 --- a/src/test/java/com/thealgorithms/datastructures/lists/SkipListTest.java +++ b/src/test/java/com/thealgorithms/datastructures/lists/SkipListTest.java @@ -42,12 +42,26 @@ class SkipListTest { } @Test - void remove() { + void removeFromHead() { SkipList skipList = createSkipList(); + String mostLeftElement = skipList.get(0); int initialSize = skipList.size(); print(skipList); - skipList.remove("a"); + skipList.remove(mostLeftElement); + + print(skipList); + assertEquals(initialSize - 1, skipList.size()); + } + + @Test + void removeFromTail() { + SkipList skipList = createSkipList(); + String mostRightValue = skipList.get(skipList.size() - 1); + int initialSize = skipList.size(); + print(skipList); + + skipList.remove(mostRightValue); print(skipList); assertEquals(initialSize - 1, skipList.size());