😐Reverse Linked List

Problem

https://leetcode.com/problems/reverse-linked-list/

Understanding of the problem

We take the three-pointers prev , current and forw. These pointers help in linking and unlinking the nodes

Edge cases

  • Null linked list

  • Linked list with only one node

Solution

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        // Time complexity: O(n), n->number of nodes in linked list
        // Space complexity: O(1), Auxillary space
        
        // Edge case
        if(head==null || head.next==null){
            return head;
        }
        ListNode prev = null;
        ListNode curr = head;
        ListNode forw = null;

        while(curr != null) {
            // Keeps track of next node to be processed after link is broken
            forw = curr.next; 
            // Set the current node link to prev (Reverse happens here). This breaks the link to
            // next pointer
            curr.next = prev; 
            // Assigning current node to prev.
            prev = curr;
            // Assigning next node to be processed to current
            curr = forw;
        }

        // After all the reversal happens the previous node will be having reverse links
        return prev;
    }
}
```

Last updated

Was this helpful?