/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
void Separate(struct ListNode* head)//将链表奇偶节点重排
{
    struct ListNode* phead = head->next; //偶节点的头
    struct ListNode* tmp = phead->next;    //指向原链表head的指针
    struct ListNode* ptmp = phead;   //指向tmp的前一个节点的指针
    struct ListNode* pnode = phead;  //新链表的尾指针
    head->next = phead->next;
    for (int i = 3; tmp != NULL; tmp = tmp->next, i++)
    {
        if (i % 2 == 0)
        {
            ptmp->next = tmp->next;
            pnode->next = tmp;
            pnode = tmp;
            
        }
        else 
        {
            ptmp = tmp;
        }
    }
    ptmp->next = phead;
    pnode->next = NULL;
    
}

struct ListNode* oddEvenList(struct ListNode* head ) {
    // write code here
    if (head == NULL || head->next == NULL || head->next->next == NULL)	//节点数小于3就直接返回
    {
        return head;
    }
    Separate(head);
    return head;
}