Queue using Linked List
A queue can be easily implemented as a SLL with two pointers, first and last. The trick is to remember that the arrows are kind of flipped.
last <- node <- node <- node <- first
Queue() pushes a new last
Dequeue() removes the first node.
Remember that if only one item is in the queue, head = tail; therefore if I dequeue(lastNode) I must set *both* head and tail to None.
Remember that if a dequeue() the last node, first is automatically set to None but I also have to seat last to None.
class Node(object):
def __init__(self, value):
self.value = value
self.next = None
class Queue(object):
first = None
last = None
def enqueue(self, value):
new_node = Node(value)
if self.first is None:
self.first = self.last = new_node
else:
self.last.next = new_node
self.last = new_node
def dequeue(self):
self.first = self.first.next
if self.first is None:
self.last = self.first
print 'empty'
def show(self):
n = self.first
while n is not None:
print n.value,
n = n.next
q = Queue()
q.enqueue('how')
q.enqueue('are')
q.enqueue('you')
q.show()
print
q.dequeue()
q.dequeue()
q.dequeue()
print
q.enqueue('!')
q.show()