⭐Reorder List

Inefficient Solution: 1st attempt
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
 
ListNode *getSecondToLast(ListNode *ll) {
    while(ll -> next -> next) 
        ll = ll -> next;
        
    return ll;
}
 
ListNode* Solution::reorderList(ListNode* A) {
    ListNode* first = A;
    while(first -> next && first -> next -> next) {
        ListNode* prev = getSecondToLast(first);
        ListNode* last = prev -> next;
        last -> next = first -> next;
        first -> next = last;
        prev -> next = NULL;
        first = last -> next;
    }
    
    return A;
}

Efficient: Breaking the list in two halves

Time Complexity: O(n)O(n)​

Space Complexity: O(1)O(1)​

Last updated