In [2]:
class Node:
    def __init__(self, data = None, next = None):
        self.data = data
        self.next = next

In [6]:
class Queue:
    def __init__(self):
        self.head = None
        self.tail = None
        self.length = 0
    
    def enqueue(self, data):
        node = Node(data)
        if not self.isEmpty():
            self.tail.next = node
            self.tail = node
        else:
            self.head = self.tail = node
        self.length = self.length + 1
    
    def poll(self):
        if self.isEmpty():
            return None
        else:
            self.length = self.length - 1
            data = self.head.data
            self.head = self.head.next
            if not self.head:
                self.tail = None
            return data
    
    def isEmpty(self):
        return self.length == 0
    
    def size(self):
        return self.length

In [7]:
queue = Queue()
queue.enqueue("first")
queue.enqueue("second")
queue.enqueue("third")
while not queue.isEmpty():
    print(queue.poll())


first
second
third

In [ ]: