1.1 Linked List
class LinkedList():
class Node():
def __init__(self, value):
self.left = None
self.right = None
self.value = value
def __init__(self):
self.start = self.Node(None)
self.last = self.start
self.length = 0
def append(self, value):
self.last.right = self.Node(value)
self.last, self.last.left = self.last.right, self.last
self.length+=1
def pop(self, index:int=None):
if index is None:
index = self.length-1
if index >= self.length:
return None
curr = self.start
for _ in range(index+1):
curr = curr.right
if index == self.length-1:
curr.left.right = None
self.last = curr.left
else:
curr.left.right, curr.right.left = curr.right, curr.left
self.last = curr.right
self.length-=1
return curr.value
def __str__(self):
seq = "["
curr = self.start
while curr.right:
seq += curr.right.value
curr = curr.right
if curr.right:
seq+=", "
seq+="]"
return seq
1.1.1 Queue
class Queue(LinkedList):
def __init__(self):
super().__init__()
def pop(self, index:int=None):
index = 0 if index is None else index
if index >= self.length:
return None
curr = self.start
for _ in range(index+1):
curr = curr.right
if index == self.length-1:
curr.left.right = None
self.last = curr.left
else:
curr.left.right, curr.right.left = curr.right, curr.left
self.last = curr.right
self.length-=1
return curr.value
1.1.2 Dequeue
class Dequeue(LinkedList):
def __init__(self):
super().__init__()
def appendleft(self, value):
self.start.left = self.Node(value)
self.start, self.start.right = self.start.left, self.start
self.length+=1
def popleft(self):
curr = self.start
curr.left.right, curr.right.left = curr.right, curr.left
self.last = curr.right
self.length-=1
return curr.value
1.1.3 Circular Queue