Skip to content

Instantly share code, notes, and snippets.

@DiegoGallegos4
Last active April 17, 2019 23:36
Show Gist options
  • Save DiegoGallegos4/9db8724f0bd178a1a4e241484c1d6332 to your computer and use it in GitHub Desktop.
Save DiegoGallegos4/9db8724f0bd178a1a4e241484c1d6332 to your computer and use it in GitHub Desktop.
Doubly-Linked List
class Node:
def __init__(self, key, next=None, prev=None):
self.key = key
self.next = next
self.prev = prev
class DoublyLinkedList:
def __init__(self, head=None):
self.head = None
self.tail = None
def is_empty(self):
return self.head == None
def push_back(self, key):
node = Node(key)
# set next as None
if self.tail == None:
self.head = node
self.tail = node
# set prev as None
else:
self.tail.next = node
node.prev = self.tail
self.tail = node
def pop_back(self):
if self.head == None:
raise Exception("Empty List")
if self.head == self.tail:
self.head = None
self.tail = None
else:
self.tail = self.tail.prev
self.tail.next = None
def add_after(self, node, key):
new_node = Node(key)
new_node.next = node.next
new_node.prev = node
node.next = new_node
if new_node.next:
new_node.next.prev = new_node
if self.tail == node:
self.tail = new_node
def add_before(self, node, key):
new_node = Node(key)
new_node.next = node
new_node.prev = node.prev
node.prev = new_node
if new_node.prev:
new_node.prev.next = new_node
if self.head == node:
self.head = new_node
def __str__(self):
lst = "["
node = self.head
while node:
lst += str(node.key)
if node.next:
lst += ", "
node = node.next
return lst + "]"
l = DoublyLinkedList()
for i in range(5): l.push_back(i)
print(l)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment