DEV Community

Manoj Kumar
Manoj Kumar

Posted on

Reverse a Linked List – Python (Step-by-Step)

πŸ” Reverse a Linked List – Python (Step-by-Step)

Hi All,

Today I solved a fundamental problem in Data Structures: Reverse a Linked List.


πŸ“Œ Problem Statement

Given the head of a singly linked list, reverse the list and return the new head.


πŸ” Example

Input:

1 -> 2 -> 3 -> 4 -> 5
Enter fullscreen mode Exit fullscreen mode

Output:

5 -> 4 -> 3 -> 2 -> 1
Enter fullscreen mode Exit fullscreen mode

πŸ’‘ Approach

πŸ”Ή Iterative Method (Optimal)

πŸ‘‰ We reverse the links one by one using pointers.


🧠 Step-by-Step Logic

We use three pointers:

  • prev β†’ previous node
  • curr β†’ current node
  • next_node β†’ next node

Steps:

  1. Initialize:

    • prev = None
    • curr = head
  2. Traverse the list:

    • Store next node
    • Reverse link
    • Move pointers forward

πŸ’» Python Code

class ListNode:
    def __init__(self, val=0):
        self.val = val
        self.next = None


def reverseList(head):
    prev = None
    curr = head

    while curr:
        next_node = curr.next   # store next
        curr.next = prev        # reverse link
        prev = curr             # move prev
        curr = next_node        # move curr

    return prev
Enter fullscreen mode Exit fullscreen mode

πŸ” Dry Run

For:

1 -> 2 -> 3
Enter fullscreen mode Exit fullscreen mode

Steps:

  • Reverse 1 β†’ None
  • Reverse 2 β†’ 1
  • Reverse 3 β†’ 2 β†’ 1

Final:

3 -> 2 -> 1
Enter fullscreen mode Exit fullscreen mode

πŸ–₯️ Sample Output

Input: 1 -> 2 -> 3 -> 4 -> 5
Output: 5 -> 4 -> 3 -> 2 -> 1
Enter fullscreen mode Exit fullscreen mode

⚑ Complexity Analysis

  • Time Complexity: O(n) βœ…
  • Space Complexity: O(1) βœ…

🧠 Alternative Method (Recursive)

def reverseList(head):
    if not head or not head.next:
        return head

    new_head = reverseList(head.next)
    head.next.next = head
    head.next = None

    return new_head
Enter fullscreen mode Exit fullscreen mode

🧠 Why this is important?

  • Core linked list concept
  • Tests pointer manipulation
  • Frequently asked in interviews

βœ… Conclusion

This problem helped me understand:

  • Pointer handling
  • Linked list traversal
  • In-place reversal

πŸš€ Must-know problem for coding interviews!


Top comments (0)