这道题来说,首先就是要得到奇数位置与偶数位置的值,获取这个值有两个方法
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 }