Problem
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given
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