Given a singly linked list L: L 0→L 1→…→L n-1→L n,
reorder it to: L 0→L n →L 1→L n-1→L 2→L n-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}.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void reorderList(ListNode *head) {
if(!head) return;
vector<int> V;
ListNode* ptr = head;
/*
for(; ptr!=NULL; ptr=ptr->next){
V.push_back(ptr->val);
}
*/
while(ptr != NULL){
V.push_back(ptr->val);
ptr = ptr->next;
}
int i= 0;
int j= V.size()-1;
int flag = 0;
ptr = head;
while(i<=j){
if((flag%2)==0){
ptr->val = V[i]; i+=1;
}
else{
ptr->val = V[j]; j-=1;
}
++ flag;
ptr = ptr->next;
}
}
};