目录
题目
- 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
法一、迭代
var swapPairs = function(head) {
let dummy = {next:head}
let p1 = dummy
while(p1.next && p1.next.next){
let p2 = p1.next
let p3 = p2.next
//交换p2和p3
p1.next = p3
p2.next = p3.next
p3.next = p2
//移动指针
p1 = p2
}
return dummy.next
};
法二、递归
var swapPairs = function(head) {
// 基本情况:如果链表为空或只有一个节点,直接返回头节点
if (!head || !head.next) {
return head;
}
// 记住前两个节点
let first = head;
let second = head.next;
// 递归交换后续节点,并将结果连接到当前交换的节点上
first.next = swapPairs(second.next);
second.next = first;
// 返回新的头节点(第二个节点)
return second;
};
- 比较难理解,