Hi, I was learning python on my own and wanted to know what was wrong with my code for reversing a linked list python

Viewed 29
class LL:
    def __init__(self):
        self.head = None
        self.lnode = None

    def append(self, data):
        if self.lnode is None:
            self.head = Node(data)
            self.lnode = self.head
        else:
            self.lnode.next = Node(data)
            self.lnode = self.lnode.next

    def display(self):
        if self.head is None:
            print("Linked List Empty!")
        else:
            temp = self.head
            while temp:
                print(temp.data, end=" ")
                temp = temp.next

    def reversal(self):
        prev = None
        temp = None
        self.lnode = self.head
        while self.head:
            temp = self.head.next
            self.head.next = prev
            prev = self.head
            self.head = temp

after reversing I'm getting the output as "Linked List Empty!"

1 Answers

Missing Node class in your code :) - add it.

Solution: In "reversal" method after while Head is set to None, so you have to set it on last value (variable "prev").

Full code:

# Node class
class Node:

    # Function to initialise the node object
    def __init__(self, data):
        self.data = data  # Assign data
        self.next = None  # Initialize next as null

class LL:
    def __init__(self):
        self.head = None
        self.lnode = None

    def append(self, data):
        if self.lnode is None:
            self.head = Node(data)
            self.lnode = self.head
        else:
            self.lnode.next = Node(data)
            self.lnode = self.lnode.next

    def display(self):
        if self.head is None:
            print("Linked List Empty!")
        else:
            temp = self.head
            while temp:
                print(temp.data, end=" ")
                temp = temp.next

    def reversal(self):
        prev = None
        temp = None
        self.lnode = self.head
        while self.head:
            temp = self.head.next
            self.head.next = prev
            prev = self.head
            self.head = temp
        self.head = prev # RobertG added only this line to your code

ll = LL()

ll.append(1)
ll.append(2)
ll.append(3)

print("Before reversal")
ll.display()

ll.reversal()
print("\nAfter reversal")
ll.display()

Output:

Before reversal
1 2 3 
After reversal
3 2 1 
Related