https://leetcode-cn.com/problems/reorder-list/
给定一个单链表 L 的头节点 head ,单链表 L 表示为:
L0 → L1 → … → Ln-1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
/**
* @param {ListNode} head
* @return {void} Do not return anything, modify head in-place instead.
*/
var reorderList = function(head) {
let p=head
let arr=[]
while(p){
arr.push(p)
p=p.next
}
let i=0,j=arr.length-1
while(i<j){
arr[i].next=arr[j]
if(j-1>i){
arr[j].next=arr[i+1]
}else{
arr[j].next=null
}
if(arr.length%2!==0 && i+1===j-1){
//长度为奇数时,考虑的边界问题
arr[i+1].next=null
}
i++
j--
}
head=arr[0]
};