💛题目描述:
给定一个单链表 L 的头节点 head ,单链表 L 表示为:
L0 → L1 → … → Ln-1 → Ln
请将其重新排列后变为:
L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换
💗解题思路:
先将所有节点打断,让每个节点都指向null,并且将这些链表存入一个数组,最后通过两个指针将其连接起来
function reorderList(head){
let p;
const arr =[];
while(head){
p = head.next;
head.next = null;
arr.push(head);
head = p
}
//定义两个左右指针
let left = 0;
let right = arr.length-1;
while(left < right){
arr[left].next = arr[right];
//如果链表节点数为奇数时单独处理,避免出现环形
if(left+1 != right){
arr[right].next = arr[left+1]
}
left++;
right--;
}
return arr[0]
}