import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode oddEvenList (ListNode head) {

        if (head == null) {
            return head;
        }

        int len = 0;
        ListNode temp = head;
        while (temp != null) {
            len++;
            temp = temp.next;
        }

        //奇数位置节点挂接处
        ListNode headNode = new ListNode(-1);
        //偶数位置节点挂接处
        ListNode headNode2 = new ListNode(-2);
        ListNode headTemp = headNode;
        ListNode headTemp2 = headNode2;
        ListNode curNode = head;

        for (int i = 1; i <= len; i++) {

            if (i % 2 != 0) {
                headTemp.next = curNode;
                headTemp = curNode;
            } else {
                headTemp2.next = curNode;
                headTemp2 = curNode;
            }

            curNode = curNode.next;
        }

        //{1,4,6,3,7} 当链表为奇数个节点时 要切断最后的联系 否则3->7 1->6->7->4->3->7形成了环
        headTemp2.next = null;
        //合并奇数、偶数节点 挂接为一组节点
        headTemp.next = headNode2.next;

        return headNode.next;
    }
}