Given {1,2,3,4}, reorder it to {1,4,2,3}.
class Solution { public: ListNode *midnode(ListNode *head) //get the midnode of list { ListNode *first=head,*twice=head; while(twice->next->next!=NULL) { twice=twice->next->next; first=first->next; } return first; } ListNode *reverse(ListNode *head)//reverse the second part of the list { ListNode *prenode=head,*currnode=head,*nextnode=head->next; prenode->next=NULL; while(nextnode) { currnode=nextnode; nextnode=nextnode->next; currnode->next=prenode; prenode=currnode; } return currnode; } void ordernode(ListNode *head1,ListNode *head2)//combine two lists in order { ListNode *curr1=head1->next,*temp=head1->next; ListNode *curr2=head2; while(curr2) { curr1=curr1->next; temp->next=curr2; curr2=curr2->next; temp=temp->next->next=curr1; temp=curr1; } } void reorderList(ListNode *head) { ListNode *mid=NULL,*midnext=NULL; if(head==NULL||head->next==NULL) cout<<"empty list"<<"\n"; //judgment of empty list else if(head->next->next==NULL||head->next->next->next==NULL) cout<<head->next<<" "<<head->next->next<<"\n"; //the list just has one or two nodes else { mid=midnode(head);//get the mid element of list midnext=mid->next->next; mid->next->next=NULL;//divide the list into two parts ordernode(head,reverse(midnext)); } } };LeetCode 测试的结果: