/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
#include <cstddef>
#include <vector>
class Solution {
public:
    void reorderList(ListNode *head) {
        vector<int> a,b;
        ListNode *s=head;
        while(s!=nullptr) {
            a.push_back(s->val);
            s=s->next;        
        }
        if(a.size()<=2)
        {
            return;
        }
        s=head;
        if(a.size()%2==0)
        {
            for(int i=a.size()-1;i>a.size()/2-1;i--)
            {
                s=s->next;
                s->val=a[i];
                s=s->next;
            }
        }
        else {
            for(int i=a.size()-1;i>a.size()/2;i--)
            {
                s=s->next;
                s->val=a[i];
                s=s->next;
            }
        }
        for(int i=1;i<=a.size()/2;i++)
        {
            if(head!=nullptr)
            {
                head=head->next;
            }
            if(head->next!=nullptr)
            {
                head=head->next;
                head->val=a[i];
            }
        }
    }
};