/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    ListNode* oddEvenList(ListNode* head) 
    {
        int i=0;
        int count=1;
        vector <int> a;
        vector <int> b;
        ListNode*p=head;
        while(p)
        {
            if(count%2==0)
            {
                b.push_back(p->val);
            }
            else 
            {
                a.push_back(p->val);
            }
            count++;
            p=p->next;
        }
        ListNode*ans=NULL;
        ListNode*t=NULL;
        int len1=a.size();
        int len2=b.size();
        if(len1==0  &&  len2==0)
        {
            return NULL;
        }
        else 
        {
            if(len1==0)
            {
                ans=t=new ListNode(b[0]);
                for(i=1;i<len2;i++)
                {
                    t->next=new ListNode(b[i]);
                    t=t->next;
                }
            }
            else 
            {
                ans=t=new ListNode(a[0]);
                for(i=1;i<len1;i++)
                {
                    t->next=new ListNode(a[i]);
                    t=t->next;
                }
                for(i=0;i<len2;i++)
                {
                    t->next=new ListNode(b[i]);
                    t=t->next;
                }
            }
        }
        return ans;
    }
};