Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<a href="https://github.com/meooow25">meooow</a> &emsp;
<a href="https://github.com/tfg50">tfg</a> &emsp;
<a href="https://github.com/sgtlaugh">sgtlaugh</a> &emsp;
<a href="https://github.com/abertell">abertell</a> &emsp;
</strong>
</div>

Expand Down
32 changes: 31 additions & 1 deletion pyrival/data_structures/LinkedList.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,25 +84,55 @@ def insert(self, index, value):
self.insert_between(new_node, self.sentinel.prev, self.sentinel)
else:
raise IndexError
self.__len += 1

def insert_between(self, node, left_node, right_node):
if node and left_node and right_node:
node.prev = left_node
node.next = right_node
left_node.next = node
right_node.prev = node
self.__len += 1
else:
raise IndexError

def insert_after(self, node, value):
new_node = Node(value)
node.next.prev = new_node
new_node.next = node.next
node.next = new_node
new_node.prev = node
self.__len += 1

def merge_left(self, other):
self.sentinel.next.prev = other.sentinel.prev
other.sentinel.prev.next = self.sentinel.next
self.sentinel.next = other.sentinel.next
self.sentinel.next.prev = self.sentinel
self.__len += other.__len

def merge_right(self, other):
self.sentinel.prev.next = other.sentinel.next
other.sentinel.next.prev = self.sentinel.prev
self.sentinel.prev = other.sentinel.prev
self.sentinel.prev.next = self.sentinel
self.__len += other.__len

def pop(self, node = None):
if node == None:
node = self.sentinel.prev
if self.__len < 1:
raise IndexError
node.prev.next = node.next
node.next.prev = node.prev
self.__len -= 1
return node.value

def before(self, node):
if node.prev == self.sentinel:
return node.prev.prev
return node.prev

def after(self, node):
if node.next == self.sentinel:
return node.next.next
return node.next