package main
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
*/
func oddEvenList( head *ListNode ) *ListNode {
	if head == nil || head.Next == nil {
		return head
	}
	oddPointer := head
	evenPointer := head.Next
	list1 := &ListNode{Val: 0}
	list2 := &ListNode{Val: 0}
	tmp1 := list1
	tmp2 := list2
	for oddPointer != nil && oddPointer.Next != nil && evenPointer != nil && evenPointer.Next != nil {
		tmp1.Next = &ListNode{Val: oddPointer.Val}
		tmp2.Next = &ListNode{Val: evenPointer.Val}
		tmp1 = tmp1.Next
		tmp2 = tmp2.Next
		oddPointer = oddPointer.Next.Next
		evenPointer = evenPointer.Next.Next
	}
	if oddPointer != nil {
		tmp1.Next = oddPointer
		tmp1 = tmp1.Next
	}
	if evenPointer != nil {
		tmp2.Next = evenPointer
	}
	tmp1.Next = list2.Next
	return list1.Next
}