- Published on
Reverse Linked List
- Authors

- Name
- Alex Noh
Introduction
Given the head of a singly linked list, reverse the list, and return the reversed list. The interface is described below.
list_node.py
from typing import Optional
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next: Optional['ListNode']=None):
self.val = val
self.next = next
# This will form a linked list where the order is 1 -> 2 -> 2 -> 1
fourth = ListNode(val=1)
third = ListNode(val=2, next=fourth)
second = ListNode(val=2, next=third)
first = ListNode(val=1, next=second)
Solutions
1. Using recursion
To reverse a linked list using recursion, we create a function named reverse. This function takes two parameters: node, the current node being processed, and prev, which points to the previous node. We start the recursion from the head of the list and call the reverse() function recursively.
Here's the implementation:
recursion.py
from typing import Optional
def reverse_linked_list(head: ListNode) -> ListNode:
def reverse(node: ListNode, prev: Optional[ListNode] = None):
if not node:
return prev
next_node = node.next
node.next = prev
return reverse(next_node, node)
return reverse(head)
2. Using Iteration
To reverse a linked list using iteration, we create a function that iteratively processes each node, reversing the links as we go.
Here's the implementation:
iteration.py
from typing import Optional
def reverse_linked_list(head: ListNode) -> ListNode:
node, prev = head, None
while node:
next_node, node.next = node.next, prev
prev, node = node, next_node
return prev