0206. Reverse Linked List

Easy | Linked List + Two Pointer | 16 ms (98.94%), 15.4 MB (80.06%)

Source: LeetCode - Reverse Linked List GitHub: Solution / Performance

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

We need two pointers, one for recording the previous node, and the other one for iterating the linked list.

We reverse the linked list by modifying the current node's next pointer to make it point to the previous node.

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        # (base case)
        if not head: return head
        if not head.next: return head
        
        # ==================================================
        #  Linked List                       (Iterative)   =
        # ==================================================
        # time  : O(n)
        # space : O(1)
        
        prev = None
        
        while head:
            # STORE next node for next iteration
            tmp = head.next
            
            # RE-ASSIGN next pointer to prev node
            head.next = prev
            
            # ASSIGN prev node to current node
            prev = head
            
            # MOVE current node to next node
            head = tmp
        
        return prev

Last updated