想要精通算法和SQL的成长之路 - 两两交换链表中的节点
想要精通算法和SQL的成长之路 - 两两交换链表中的节点
- 前言
- 一. 两两交换链表中的节点
前言
想要精通算法和SQL的成长之路 - 系列导航
一. 两两交换链表中的节点
原题链接
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
写这道题目之前,可以先看下 反转链表。这题只不过是它的一个进阶版。
思路如下(借用了代码随想录的思路图):
按照红色的箭头进行指针变更,不过有几个值得注意的点给大家说下:
- 我们需要用一个虚拟指针
h
。并使得h.next = head;
。这样做的目的:使得原链表的所有节点按照统一的方式进行操作替换。否则头结点就可能需要单独处理。 - 在修改指针的时候,我们往往需要使用几个临时变量去存储指针对象。这样做的目的:因为一旦值被替换了,原值就不复存在了,那就无法进行值/引用的交换了。
- 这类反转的题目,一定要手动画图,整理好顺序,写代码就方便容易理解了。
例如以下代码:
int a = 1,b = 2;
a=b;
b=a;
上面的值交换的写法就是错误的。最终a和b的值都是2。正确的应该是:
int a = 1, b = 2;
int tmp = b;
b = a;
a = tmp;
其实这是个很简单的道理,但是往往在链表的指针替换时候,很多人却不知道为什么这样做(有可能都是next
、pre
的操作,整蒙圈了)。
最终代码如下:
public ListNode swapPairs(ListNode head) {// 构建一个虚拟节点ListNode h = new ListNode(0);h.next = head;ListNode cur = h;while (cur.next != null && cur.next.next != null) {// 把这两个值缓存起来ListNode tmp1 = cur.next;ListNode tmp2 = cur.next.next.next;// 第一步,相邻节点的头结点变更cur.next = cur.next.next;// 第二步:相邻节点之间的引用互换cur.next.next = tmp1;// 第三部,相邻节点的尾结点变更cur.next.next.next = tmp2;// 当前节点往后移动两位,进入下一层循环cur = cur.next.next;}// 返回链表return h.next;
}
想要精通算法和SQL的成长之路 - 两两交换链表中的节点相关推荐
- 想要精通算法和SQL的成长之路 - 第N高的薪水(SQL)
想要精通算法和SQL的成长之路 - 第N高的薪水(SQL) 前言 一. 第二高的薪水 1.1 offset 的使用 1.2 ifnull 的使用 1.3 分页查询 1.3 总结 二. 第N高的薪水 前 ...
- 想要精通算法和SQL的成长之路 - 超过经理收入的员工(SQL)
想要精通算法和SQL的成长之路 - 超过经理收入的员工(SQL) 前言 一. 超过经理收入的员工 1.1 自连接 1.2 子查询 1.3 join 语句 前言 想要精通算法和SQL的成长之路 - 系列 ...
- 想要精通算法和SQL的成长之路 - 判断子序列问题
想要精通算法和SQL的成长之路 - 判断子序列问题 前言 一. 判断子序列 1.1 动态规划做法 1.2 双指针 二. 不同的子序列 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 判断子序 ...
- 好想学python机器人_【Python成长之路】从零学GUI -- 制作智能聊天机器人
[写在前面] 鹏哥:最近老惹小燕同学不开心,结果都没人陪我聊天了.哎,好无聊呀! 肥宅男:女朋友什么的最无聊了,还没我的图灵机器人好玩. 鹏哥:图灵?好巧,和我部门同名. [效果如下] [实现过程] ...
- C语言基于FOC控制算法和STM32主控芯片的双路直流无刷电机控制器源码
[FOC+STM32]双路直流无刷电机矢量控制器-使用文档
- BF算法和KMP算法
给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...
- Oracle 20c 新特性:XGBoost 机器学习算法和 AutoML 的支持
墨墨导读:XGBoost是一个高效.可扩展的机器学习算法,用于回归和分类(regression and classification),使得XGBoost Gradient Boosting开源包可用 ...
- 使用Apriori算法和FP-growth算法进行关联分析
目录 1. 关联分析 2. Apriori原理 3. 使用Apriori算法来发现频繁集 4. 使用FP-growth算法来高效发现频繁项集 5. 示例:从新闻网站点击流中挖掘新闻报道 扩展阅读 系列 ...
- Dijkstra算法和Floyd算法超详解以及区别
鉴于之前我看到过非常好的博客,如果自己总结的话,大多也是按照别的博主的思路来解释,所以就直接推荐给大家这些优秀的博客: Dijkstra:最短路径dijkstra算法精品代码(超详解) Floyd:F ...
最新文章
- 新浪微博授权失败:applications over the unaudited use restrictions
- 转载:sqlmap的应用实战
- 服务器3个w目录文件夹,第 4 章 目录服务器条目 (Sun Java System Directory Server Enterprise Edition 6.2 管理指南)...
- 快递鸟电子面单打印功能基于java
- matlab幂法的瑞利商加速,瑞利商加速定理14.PPT
- Youtube深度学习推荐系统
- 从Oracle数据库故障到AIX内存管理
- jni直接转byte_JNI jbyteArray转char*
- 在redis上实现分布式锁
- 运动目标跟踪(十三)--SRDCF/DeepSRDCF
- 算法(第四版) 2.1答案
- linux安装程序时Cannot uninstall XXX. It is a distutils installed project and thus we cannot accurately
- c r 语言教程,R语言初级教程
- 【论文学习】基于区块链的档案数据保护和共享方法
- CANopen协议解读
- Meta-Q-Learning
- 举个栗子~Tableau 技巧(211):学做指针环形图
- 一文搞懂华为ML Kit数字人,超简单集成
- 高血压患者的饮食宜忌等
- 正向代理和反向代理快速理解