Reverse Linked List — Iterative and Recursive
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