给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
两两交换链表中的节点,按照题意,先获取前两个节点然后交换位置,交换后的节点放到结果的末尾,就得到目标链表;
var swapPairs = function(head) {
let curChange = head; // 当前需要交换的节点
let resHead = null; // 结果的头节点
let preAfterChange = null // 交换之后的第一个节点
let resLast = null; // 记录结果的末尾节点
while(curChange&&curChange.next){ // 只有前两个节点存在才交换
const tail = curChange.next.next; // 将原剩余部分节点缓存起来
curChange.next.next = null; // curChange只留需要交换的前两个节点
preAfterChange = curChange.next; // 将原节点的第二个放在第一个位置
curChange.next = null; // curChange只留需要交换的第一个节点
preAfterChange.next = curChange; // 将原节点的第一个位置放到第二个位置
if(!resHead){ // 如果结果节点是空的就直接赋值给
resHead = preAfterChange;
resLast = preAfterChange.next // 更新结果的末尾节点
} else {
resLast.next = preAfterChange; //只更新末尾节点
resLast = preAfterChange.next // 更新结果的末尾节点
}
curChange = tail // 更新需要交换的节点
}
if(resLast){
resLast.next = curChange // 如何前两节点只有一个或者一个没有的情况不交换直接拼接到末尾
} else {
return curChange;
}
return resHead;
};
特殊的日子,序珩宝贝2024年1月13日22点08分诞生了;