Skip to content

Instantly share code, notes, and snippets.

@jdmoore7
Created September 13, 2022 21:33
Show Gist options
  • Save jdmoore7/397adf1baf2c258ac70963f6b507c995 to your computer and use it in GitHub Desktop.
Save jdmoore7/397adf1baf2c258ac70963f6b507c995 to your computer and use it in GitHub Desktop.
A Doubly Linked List implementation of a dual purposed Stack and Queue
class StaqNode:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Staq:
def __init__(self):
self.head = None
self.tail = None
self.size = 0
def insert(self, val):
# 0 nodes
if not self.head and not self.tail:
node = StaqNode(val=val)
self.head = self.tail = node
# >= 1 node
else:
node = StaqNode(val=val)
node.left = self.tail
self.tail.right = node
self.tail = node
self.size += 1
def pop(self, head=True, val=False):
if self.size == 0:
return None
elif self.size == 1:
node = self.head
if not node:
node = self.tail
self.tail = None
self.head = None
else:
if head:
node = self.head
self.head = node.right
if self.head:
self.head.left = None
else:
node = self.tail
self.tail = node.left
if self.tail:
self.tail.right = None
self.size -= 1
if val:
return node.val
return node
def printStaq(self):
curr = self.head
while curr:
print(curr.val)
curr = curr.right
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment