#Approach 1: Iterative Approach to Reverse Linked List
# Linked List Node class Node: def __init__(self, data): self.data = data self.next = None class Solution: def __init__(self): self.head = None # Head of list # Returns the linked list in display format def __str__(self): linked_list_str = "" temp = self.head while temp: linked_list_str = (linked_list_str + str(temp.data) + " ") temp = temp.next return linked_list_str # Pushes new data to the head of the list def push(self, data): temp = Node(data) temp.next = self.head self.head = temp def reverse_list(self, head): previous_node = None current_node = head while current_node: next_node = current_node.next current_node.next = previous_node previous_node = current_node current_node = next_node head = previous_node return head # Driver code linked_list = Solution() linked_list.push(5) linked_list.push(4) linked_list.push(3) linked_list.push(2) linked_list.push(1) print("Given linked list") print(linked_list) linked_list.head = linked_list.reverse_list(linked_list.head) print("Reversed linked list") print(linked_list)
Test Cases:
# Example 1 linked_list = Solution() linked_list.push(5) linked_list.push(4) linked_list.push(3) linked_list.push(2) linked_list.push(1) Output: Given linked list 1 2 3 4 5 Reversed linked list 5 4 3 2 1 # Example 2 linked_list = Solution() linked_list.push(5) linked_list.push(4) linked_list.push(3) linked_list.push(2) linked_list.push(1) Output: Given linked list 1 2 Reversed linked list 2 1 # Example 3 linked_list = Solution() linked_list.push(None) Output: Given linked list None Reversed linked list None
#Approach 2: Recursive Approach to Reverse Linked List
# Linked List Node class Node: def __init__(self, data): self.data = data self.next = None class Solution: def __init__(self): self.head = None # Head of list # Returns the linked list in display format def __str__(self): linkedListStr = "" temp = self.head while temp: linkedListStr = (linkedListStr + str(temp.data) + " ") temp = temp.next return linkedListStr # Pushes new data to the head of the list def push(self, data): temp = Node(data) temp.next = self.head self.head = temp def reverse_list(self, node, prev=None): if not node: return prev n = node.next node.next = prev return self.reverse_list(n, node) # Driver code linked_list = Solution() linked_list.push(5) linked_list.push(4) linked_list.push(3) linked_list.push(2) linked_list.push(1) print("Given linked list") print(linked_list) linked_list.head = linked_list.reverse_list(linked_list.head) print("Reversed linked list") print(linked_list)
Test Cases:
# Example 1 linked_list = Solution() linked_list.push(5) linked_list.push(4) linked_list.push(3) linked_list.push(2) linked_list.push(1) Output: Given linked list 1 2 3 4 5 Reversed linked list 5 4 3 2 1 # Example 2 linked_list = Solution() linked_list.push(5) linked_list.push(4) linked_list.push(3) linked_list.push(2) linked_list.push(1) Output: Given linked list 1 2 Reversed linked list 2 1 # Example 3 linked_list = Solution() linked_list.push(None) Output: Given linked list None Reversed linked list None