加油 第 8 练
24. 两两交换链表中的节点
题目描述:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
递归
- 新链表头节点 newHead 为原链表的第二个节点,newHead = head.next
- 新链表的第二个节点为原链表的头节点,newHead.next = head
- 返回 newHead
var swapPairs = function(head) {
if(!head || !head.next){
return head
}
const newHead = head.next
head.next = swapPairs(newHead.next)
newHead.next = head
return newHead
};
迭代
- 设置虚拟头节点 dummyHead,令当前到达的节点
temp初始时指向dummyHead - 当
dummyHead后面存在至少两个节点(temp.next && temp.next.next),node1为dummyHead后第一个节点,node2为dummyHead后第二个节点 - 两两交换节点:
temp.next指向node2node1.next指向node2.nextnode2.next指向node1- 指针后移
var swapPairs = function (head) {
let dummyHead = new ListNode(0);
dummyHead.next = head
let temp = dummyHead
while(temp.next && temp.next.next){
const node1 = temp.next
const node2 = temp.next.next
// 两两交换
temp.next = node2
node1.next = node2.next
node2.next = node1
// 指针后移
temp = node1
}
return dummyHead
};