from LNode import LNode
from LList import LList

class LList1(LList):
    def __init__(self):
        LList.__init__(self)
        self.rear = None
        
    def prepend(self, elem):
        self.head = LNode(elem, self.head)
        if self.rear is None: # empty list
            self.rear = self.head
            
    def append(self, elem):
        if self.rear is None: # empty list
            self.prepend(elem)
        else:
            self.rear.next = LNode(elem, None)
            self.rear = self.rear.next
            
    def pop(self):
        if self.head is None:
            raise ValueError
        e = self.head.elem
        if self.rear is self.head: # list with one node
            self.rear = None
        self.head = self.head.next
        return e
    
    def poplast(self):
        return None # to be implemented

if __name__ == '__main__':
    mlist1 = LList1()
    for i in range(10):
        mlist1.prepend(i)
        
    for i in range(11, 20):
        mlist1.append(i)
        
    mlist1.printall()