Search code examples
pythonpython-3.xlinked-list

Python - Linked List - Append


I'm trying to learn Linked Lists in python I've been given Linked List class and asked to create append method.

Here is the code provided.

class Node:
    def __init__(self, item, next):
        self.item = item
        self.next = next

class LinkedList:
    def __init__(self):
        self.head = None

    def add(self, item):
        self.head = Node(item, self.head)

    def remove(self):
        if self.is_empty():
            return None
        else:
            item = self.head.item
            self.head = self.head.next
            return item

    def is_empty(self):
        return self.head == None

    def __str__(self):
        tmp_str = ""
        ptr = self.head
        while ptr != None:
            tmp_str += ptr.item + " "
            ptr = ptr.next

        return tmp_str

Here is my append method but there is something wrong with it. I know if the Linked list is empty I have to create one, problem starts when there's elements inside.

def append(self, item):
    ptr = self.head
    if ptr:
        while ptr != None:
            ptr = ptr.next
        ptr = Node(item, ptr)
    else:
        self.head = Node(item, self.head)

Anyone can tell me what did I do wrong please? Any help is much appreciated.


Solution

  • Make two checks - the first checks whether self.head has been initialised. The second should traverse the list until it finds the last node. Ensure you don't overstep your boundaries, or else you won't be able to link the last node to the new last node.

    def append(self, item):
        if not self.head:
            self.head = Node(item, self.head)
        else:
            ptr = self.head
            while ptr.next:                    # traverse until ptr.next is None
                ptr = ptr.next
            ptr.next = Node(item, ptr.next)    # initialise ptr.next