Home > Blockchain >  how doesn't 'while(temp)' work and 'while(temp.next)' does?
how doesn't 'while(temp)' work and 'while(temp.next)' does?

Time:03-04

I don't understand why in line 31 of my code, it needs to be while(temp.next): instead of while(temp):Can someone please help me understand? I am new and confused. Here is my code for my Linked List:

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

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

    def printlist(self):
        temp = self.head
        while(temp):
            print(temp.data)
            temp = temp.next

    def append(self, new_data):
        new_node = Node(new_data)
        if self.head == None:
            self.head = new_node
        else:
            temp = self.head

            #if I replace the following line with "while(temp):" instead of 
            #"while(temp.next)"it will not work. Why?

            while(temp.next):
                temp = temp.next
            temp.next = new_node

 


mylist = LinkedList()
mylist.head = Node(1)
mylist.append(2)
mylist.printlist()

CodePudding user response:

while (temp) will ensure that temp is falsy (None) when the loop exits. But then the statement below that loop will fail:

        temp.next = new_node

...as there is no next attribute when temp is None.

The goal of this while loop is to find the last node. The distinguishing characteristic of the last node is that its next attribute is None, so that explains the while condition. As long as this node still has a successor, it is not the last node, and we should step forward. That is what this loop is doing.

  • Related