hacer una lista vinculada en Python

"""
Implementation of LinkedList Datastructure in Python
"""

class Node:

    """
    init() : constructor
    """
    def __init__(self, data = None, next = None):
        self.data = data
        self.next = next


    """
    getData() : get the data of node;
    """
    def getData(self):
        return self.data


    """
    setData() : set the data to the required node;
    """
    def setData(self,data):
        self.data = data


class LinkedList:

    """
    init() : constructor;
    """
    def __init__(self, head = None):
        self.head = None


    """
    len() : return the length of the nodes;
    """
    def __len__(self):
        if(self.head == None):
            return 0
        else:
            count = 0
            node = self.head
            while(node != None):
                node = node.next
                count += 1
            return count


    """
    getItem() : return the specific index node from linked list;
    """
    def __getitem__(self, index):
        return self.head[index]


    """
    print() : list all nodes of linked list
    """
    def show(self):
        node = self.head
        while(node.next != None):
            print(node.data, end=" -> ")
            node = node.next
        print(node.data)


    """
    pushFront() : push elements from front;
    eg, A <- B <- C <- D <- E
    """
    def pushFront(self, data):
        newNode = Node(data)
        if(self.head == None):
            self.head = newNode
        else:
            prevHead = self.head
            self.head = newNode
            newNode.next = prevHead


    """
    pushBack() : push elements from the end;
    eg, A -> B -> C -> D -> E
    """
    def pushBack(self, data):
        newNode = Node(data)
        if self.head == None:
            self.head = newNode
        else:
            temp = self.head
            while(temp.next != None):
                temp = temp.next
            temp.next = newNode


    """
    remove() : remove node for specific index;
    eg, 
    Input : HEAD -> A -> B -> C -> None, index : 2
    Output : HEAD -> A -> C -> None
    """        
    def remove(self, index):
        if(self.head == None):
            return None
        else:
            i, size = 1, len(self)
            # Index > Size;
            if(index > size):
                index = index % size
            # Base Case;
            if(index == 1):
                self.head = self.head.next
                return 
            # Main Case;
            # Step 1 : Go to one node before end;
            while(i < index-1):
                node = node.next
                i += 1
            # Step 2 : Removal of Specific node
            if(node.next and node.next.next):
                temp = node.next 
                node.next = node.next.next
                del temp            # Free-Up Memory
            else:
                node.next = None
            

    """
    pop() : remove node from end;
    eg, 
    Input : A -> B -> C 
    Output  :A -> B -> None  
    """
    def pop(self):
        if(self.head == None):
            return
        else:
            node = self.head
            prevNode = None
            # Step 1 : Go to one node before end;
            while(node.next != None):
                prevNode = node
                node = node.next
            # Step 2 : Reset the last node;
            prevNode.next = None
            del node                # Delete last node;


    """
    reverse() : reverse the linked list;
    eg, 
    Input : HEAD -> A -> B -> C -> None 
    Output : A <- B <- C <- HEAD
    """
    def reverse(self):
        if(self.head == None):
            return 
        else:
            node = self.head
            prevNode = None
            # Step 1 : Reverse Links;
            while(node != None):
                temp = node.next 
                node.next = prevNode
                prevNode = node
                node = temp
                # Step 2 : Change Head;
                if(temp == None):
                    self.head = prevNode
            return self.head

Frail Fly