Okay so I am new to computer programming and to make a long story short I don't want to be a grocer for the rest of my life. I am 25 and just learning these concepts and python along with that so please be kind. 

I want to copy a linked list from a LinkedList object to another using a function called copyList. It should take no parameters other than its self and it should output a copy of the LinkedList while not altering the original list. 

I tried looking onto the stack and found a similar code but it did not solve my issue for the code is similar to mine but does not work in that I try printing the new LinkedList and it does not contain the values and is empty I believe. I provided the similar code in the code below commented out: 

```
class Node:
    def __init__(self,x):
        self.data = x
        self.next = None
class LinkedList:
    def __init__(self):
        self.top = None
    def printList(self):
        print("top^")
        while self.top is not None:
            print(self.top.data)
            self.top = self.top.next
        print("tail^")
    def in_list(self, x):
        current = self.top 
        while current is not None:
            if current.data is x:
                return 1
            current = current.next
        return 0
    def findCellBefore(self, x):
        current = self.top
        if current is None:
            return 0
        while current.next is not None:
            if current.next.data is x:
                current = current.next
        return 1
    def findCellBeforeSential(self,x):
        if (self.top.next is None):
            return 0 
        while (self.top.next is not None):
            if (self.top.next.data is x):
                return self.top.data
        return 1
    def add_0(self, newNode):
        # i. make next of new node as head.
        newNode.next = self.top
        # ii. move head to point to new node.
        self.top = newNode
    def add_end(self, newNode):
        current = self.top
        if (current is None):
            self.add_0(newNode)
            return 
        while (current.next is not None):
            current = current.next

        current.next = newNode 
        newNode.next = None
    def insertNode(self, after_me, new_cell):
        new_cell.next = after_me.next 
        after_me.next = new_cell

        # update prev links.

        new_cell.next.prev = new_cell 
        new_cell.prev = after_me 
    def  deleteAfter(self, after_me):
            after_me.next = after_me.next.next

    def CopyList(self):#Out put new Linked List that is a copy of current Linked List with out altering it. 
        # create new LinkedList
        newLinkedList = LinkedList()
        #current = self.top
        #below is from stackoverflow : https://stackoverflow.com/questions/36491307/how-to-copy-linked-list-in-python
        #while current.next != None:
        #    newLinkedList.add_end(current.data)
        #    current = current.next
        #newLinkedList.add_end(current.data)
        #return newLinkedList
        while self.top is not None:
            newNode = Node(self.top.data)
            newLinkedList.add_end(newNode)
            self.top = self.top.next
        return newLinkedList

LIST0 = LinkedList()

node0 = Node(1)
node1 = Node(2)
node2 = Node(3)
LIST0.add_end(node1)
LIST0.add_0(node0)
LIST0.add_0(node2)
node3 = Node(4)
LIST0.insertNode(node2, node3)

LIST0.printList()

LIST1=LIST0.CopyList()

LIST1.printList()

```

I want it to simply print out the new list that is a copy of LIST0 and have LIST1 work as a LinkedList object.