Reverse a Linked List Python (original) (raw)

Last Updated : 21 Feb, 2025

Given pointer to the head node of a linked list, the task is to reverse the linked list. We need to reverse the list by changing links between nodes.

**Examples:

Input: head: 1 -> 2 -> 3 -> 4 -> NULL
Output: head: 4 -> 3 -> 2 -> 1 -> NULL
Explanation: Reversed Linked List:

Reverse-a-Linked-List-2

Reversed Linked List

Input: head: 1 -> 2 -> 3 -> 4 -> 5 -> NULL
Output: head: 5 -> 4 -> 3 -> 2 -> 1 -> NULL
Explanation: Reversed Linked List:

Reverse-a-Linked-List-4

Reversed Linked List

Input : NULL
Output : NULL

Input : 1->NULL
Output : 1->NULL

**1. Iterative Method

The idea is to reverse the links of all nodes using **three pointers:

Starting from the first node, initialize **curr with the head of linked list and **next with the next node of curr. Update the next pointer of **curr with **prev. Finally, move the three pointer by updating **prev with **curr and **curr with **next.

Python `

class Node:

# Constructor to initialize the node object
def __init__(self, data):
    self.data = data
    self.next = None

class LinkedList:

# Function to initialize head
def __init__(self):
    self.head = None

# Function to reverse the linked list
def reverse(self):
    prev = None
    current = self.head
    while(current is not None):
        next = current.next
        current.next = prev
        prev = current
        current = next
    self.head = prev

# Function to insert a new node at the beginning
def push(self, new_data):
    new_node = Node(new_data)
    new_node.next = self.head
    self.head = new_node

# Utility function to print the LinkedList
def printList(self):
    temp = self.head
    while(temp):
        print (temp.data,end=" ")
        temp = temp.next

Driver program to test above functions

llist = LinkedList() llist.push(20) llist.push(4) llist.push(15) llist.push(85)

print ("Given Linked List") llist.printList() llist.reverse() print ("\nReversed Linked List") llist.printList()

`

Output

Given Linked List 85 15 4 20 Reversed Linked List 20 4 15 85

**2. A Simpler and Tail Recursive Method

The idea is to reach the last node of the linked list using recursion then start reversing the linked list from the last node.

Python `

class Node:

# Constructor to initialize the node object
def __init__(self, data):
    self.data = data
    self.next = None

class LinkedList:

# Function to initialize head
def __init__(self):
    self.head = None

def reverseUtil(self, curr, prev):

    # If last node mark it head
    if curr.next is None:
        self.head = curr

        # Update next to prev node
        curr.next = prev
        return

    # Save curr.next node for recursive call
    next = curr.next

    # And update next
    curr.next = prev

    self.reverseUtil(next, curr)

# This function mainly calls reverseUtil()
# with previous as None

def reverse(self):
    if self.head is None:
        return
    self.reverseUtil(self.head, None)

# Function to insert a new node at the beginning

def push(self, new_data):
    new_node = Node(new_data)
    new_node.next = self.head
    self.head = new_node

# Utility function to print the LinkedList
def printList(self):
    temp = self.head
    while(temp):
        print(temp.data,end=" ")
        temp = temp.next

Driver program

llist = LinkedList() llist.push(8) llist.push(7) llist.push(6) llist.push(5) llist.push(4) llist.push(3) llist.push(2) llist.push(1)

print("Given linked list") llist.printList()

llist.reverse()

print("\nReverse linked list") llist.printList()

`

Output

Given linked list 1 2 3 4 5 6 7 8 Reverse linked list 8 7 6 5 4 3 2 1

Please refer Reverse a linked list for more details!

Similar Reads

Basic Programs







Array Programs








List Programs







Matrix Programs









String Programs







Dictionary Programs







Tuple Programs







Searching and Sorting Programs







Pattern Printing Programs