Reverse Linked List — Iterative and Recursive

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

Problem 206 · Reverse Linked List

Difficulty: Easy · Pattern: Reversal

Solutions

// C
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode *prev = NULL, *curr = head, *nxt;
    while (curr) { nxt = curr->next; curr->next = prev; prev = curr; curr = nxt; }
    return prev;
}
// C++
ListNode* reverseList(ListNode* head) {
    ListNode *prev = nullptr, *curr = head;
    while (curr) {
        auto nxt = curr->next;
        curr->next = prev; prev = curr; curr = nxt;
    }
    return prev;
}
// Java
public ListNode reverseList(ListNode head) {
    ListNode prev = null, curr = head;
    while (curr != null) {
        ListNode nxt = curr.next;
        curr.next = prev; prev = curr; curr = nxt;
    }
    return prev;
}
// JavaScript
var reverseList = function(head) {
    let prev = null, curr = head;
    while (curr) {
        const nxt = curr.next;
        curr.next = prev; prev = curr; curr = nxt;
    }
    return prev;
};
# Python — iterative
def reverseList(head):
    prev, curr = None, head
    while curr:
        nxt = curr.next
        curr.next = prev
        prev = curr
        curr = nxt
    return prev

# Recursive
def reverseListRec(head):
    if not head or not head.next: return head
    new_head = reverseListRec(head.next)
    head.next.next = head
    head.next = None
    return new_head

Complexity

  • Time: O(n)
  • Space: O(1) iterative, O(n) recursive (call stack)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro