Python Program to Reverse a linked list

06 Jul, 2022
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 of following linked list  
       1->2->3->4->NULL
Output : Linked list should be changed to,
       4->3->2->1->NULL

Input : Head of following linked list  
       1->2->3->4->5->NULL
Output : Linked list should be changed to,
       5->4->3->2->1->NULL

Input : NULL
Output : NULL

Input  : 1->NULL
Output : 1->NULL
Iterative Method  
Python3
# Python program to reverse a linked list# Time Complexity : O(n)# Space Complexity : O(n) as 'next' #variable is getting created in each loop.  # Node class    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 functionsllist = 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()  # This code is contributed by Nikhil Kumar Singh(nickzuck_007)
Output: 
Given Linked List
85 15 4 20 
Reversed Linked List
20 4 15 85
Time Complexity: O(N)
Auxiliary Space: O(1)
A Simpler and Tail Recursive Method 
Python3
# Simple and tail recursive Python program to# reverse a linked list  # Node class    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 programllist = 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()  # This code is contributed by Nikhil Kumar Singh(nickzuck_007)
Given linked list
1 2 3 4 5 6 7 8 
Reverse linked list
8 7 6 5 4 3 2 1 
Time Complexity: O(N)
Auxiliary Space: O(1)
Please refer complete article on Reverse a linked list for more details! 
cbf63324
purkaitavi
amartyaghoshgfg
simmytarika5
rohitsingh57
Python DSA-exercises
Python LinkedList-exercises
Python-Data-Structures
Python Programs
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Python program to interchange first and last elements in a list
Appending to list in Python dictionary
Appending a dictionary to a list in Python
Differences and Applications of List, Tuple, Set and Dictionary in Python
Python | Difference between two dates (in minutes) using datetime.timedelta() method
Python - Convert JSON to string
Python Program to check Armstrong Number
Python | Remove spaces from a string
Python Program for Merge Sort
Python | Get the first key in dictionary