Sunday, November 24, 2013

Leetcode Problem : Reorder List


Problem

Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given {1,2,3,4}, reorder it to {1,4,2,3}.

Code

ListNode *reorderList_r(ListNode **l1,ListNode *l2,bool& completed) {
    if(!l2)
        return 0;
    ListNode *prev = reorderList_r(l1,l2->next,completed);
    if(!completed){
        if(*l1 == l2){
            if(prev)
                prev->next = *l1;
            completed = true;
        }
        else if((*l1)->next == l2){
            if(prev)
                prev->next = *l1;
            completed = true;
        }
        else{
            ListNode *tmp = (*l1)->next;
            (*l1)->next = l2;
            if(prev)
                prev->next = *l1;
            *l1 = tmp;
        }
        return l2;
    }
   return prev;
}
void reorderList(ListNode *head) {
    // IMPORTANT: Please reset any member data you declared, as
    // the same Solution instance will be reused for each test case.
    ListNode *l1 = head,*l2 = head;
    bool completed = false;
    ListNode *prev = reorderList_r(&l1,l2,completed);
    if(prev)
        prev->next = 0;
}

No comments:

Post a Comment