From 84030f8207cde083ade28dc43753c9cce8c227f7 Mon Sep 17 00:00:00 2001 From: pathywang Date: Sun, 4 Oct 2026 05:30:19 +0100 Subject: [PATCH 1/2] create file --- Sprint-2/implement_skip_list/skip_list.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Sprint-2/implement_skip_list/skip_list.py diff --git a/Sprint-2/implement_skip_list/skip_list.py b/Sprint-2/implement_skip_list/skip_list.py new file mode 100644 index 0000000..e69de29 From 0bd163718bae25dd7667f7a78bfd6612f8ac0001 Mon Sep 17 00:00:00 2001 From: pathywang Date: Sun, 4 Oct 2026 05:31:30 +0100 Subject: [PATCH 2/2] complete skip list --- Sprint-2/implement_skip_list/skip_list.py | 78 +++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/Sprint-2/implement_skip_list/skip_list.py b/Sprint-2/implement_skip_list/skip_list.py index e69de29..20da1bc 100644 --- a/Sprint-2/implement_skip_list/skip_list.py +++ b/Sprint-2/implement_skip_list/skip_list.py @@ -0,0 +1,78 @@ +import random + + +class Node: + def __init__(self, value, level): + self.value = value + self.next = [None] * level + + +class SkipList: + MAX_LEVEL = 16 + + def __init__(self): + self.head = Node(None, self.MAX_LEVEL) + self.level = 1 + + def random_level(self): + level = 1 + + while ( + level < self.MAX_LEVEL + and random.random() < 0.5 + ): + level += 1 + + return level + + def insert(self, value): + update = [None] * self.MAX_LEVEL + + current = self.head + + for level in range(self.level - 1, -1, -1): + while ( + current.next[level] is not None + and current.next[level].value < value + ): + current = current.next[level] + + update[level] = current + + new_level = self.random_level() + + if new_level > self.level: + for level in range(self.level, new_level): + update[level] = self.head + + self.level = new_level + + node = Node(value, new_level) + + for level in range(new_level): + node.next[level] = update[level].next[level] + update[level].next[level] = node + + def contains(self, value): + current = self.head + + for level in range(self.level - 1, -1, -1): + while ( + current.next[level] is not None + and current.next[level].value < value + ): + current = current.next[level] + + current = current.next[0] + + return ( + current is not None + and current.value == value + ) + + def __contains__(self, value): + return self.contains(value) + + + + \ No newline at end of file