? 目录
- 24.两两交换链表
24.两两交换链表
⏰ 1.解题思路
- 两两元素交换,前面需要一个虚拟节点,才能对后面两个元素进行操作
- 根据链表的元素个数是奇数还是偶数,得到循环退出的条件。
- 为偶数,temp.next = null时,即虚拟头节点的下一个节点为null,跳出循环。
- 为奇数,temp.next.next = null, 跳出循环。
- 具体操作链表的步骤如下图。最终得到链表指针指向:ret --> 2 -->1 --->3
?2.代码
var swapPairs = function (head) {
let ret = new ListNode(0, head) //定义一个虚拟头节点
temp = ret;//
while (temp.next && temp.next.next) {//循环条件
let cur = temp.next.next, //存temp.next.next节点的初始值
pre = temp.next;
//开始进行节点交换
pre.next = cur.next; //步骤1 1-->3
cur.next = pre; //步骤2 2-->1
temp.next = cur; //此时相当于pre被重新赋值,不再是初始的值。 虚拟节点-->2
temp = temp.next.next; //下一轮循环的头节点 或者写成 temp = pre
}
return ret.next;
};