24. 两两交换链表中的节点(中)
题目
- 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
法一、迭代
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;
};
- 比较难理解,
标签:
力扣
, 力扣hot100-js
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人