这道题来说,首先就是要得到奇数位置与偶数位置的值,获取这个值有两个方法
1、通过遍历的方式,根据当前循环来判断当前次数,将奇数与偶数结点分别放入各自的栈之中
2、通过双指针的方式来获得每一个指针指向的结点。
再得到奇偶位置结点之后,设置一个循环,将当前结点的next重新设置,获得新的结点。产生一个新链表,
同时要注意设置好当前的next结点的指向,防止最后出现死循环的问题

/*class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
export function oddEvenList(head: ListNode): ListNode {
    // write code here
    if(!head) return null
   /* let arrEven = []
    let arrOdd = []
    let flag = head
    let i=0
    let temp =head
    while(flag) {
        temp =flag
        if(i%2==0) {          
            arrEven.push(temp)
        }
        else {
            arrOdd.push(temp)
        }
        i++
        flag = flag.next
    }
    let newArr=arrEven.concat(arrOdd)
    //return arrEven[0]
    flag = newArr[0]
    let newHead = flag
    //return flag
    for(let i=1;i<newArr.length;i++) {
        flag.next = newArr[i]
        flag = flag.next
    }
    flag.next = null
    return newHead*/
    
    let odd = head;
    let even = head.next
    let evenHead = even
    while(even && even.next) {
        odd.next = even.next
        odd = odd.next
        even.next = odd.next
        even = even.next
    }
    odd.next = evenHead
    return head
}