详解两两交换链表中的节点
前言
LeetCode连接
题目: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
什么是只进行节点交换,什么是值交换呢?
值交换:仅仅将链表中的val值进行交换
节点交换:是节点整个对象进行交换
学习 本节需要参考博主之前的关于节点创建的文章
一文读懂移除链表元素_abc123mma的博客-CSDN博客
一、链表节点交换
从LeetCode的题目中可以得出链表交换的交换也分为3部分
详细分析请参考:另一篇博文详解反转链表_abc123mma的博客-CSDN博客
基本分析如下:
- 实例1就如前言中的图所示,链表中节点两两交换
- 实例2就是头节点head 为null 直接返回null
- 实例3是只有一个节点,即为头节点之间返回head即可
二、具体步骤
首先设置cur结点指向虚拟头结点;为了方便表示这里的虚拟头节点省略了。
按照指定顺序操作链表
【1】表示cur节点指向2节点
【2】表示1节点指向3节点
【3】表示2节点指向1节点
【操作链表后】
【下一次循环前】:cur 要移动到节点1这个位置开始对节点3和4进行操作。
cur = cur.next.next;
【循环结束条件】:因为要保证两两交换,所以每次交换时候不能少于两个节点
因此结束条件为:
cur.next != null && cur.next.next != null
1.当节点数是偶数时,cur.next==null时,循环终止。
2.当节点数是奇数时,因为最后一个节点不用交换,所以当cur.next.next==null时,循环终止
代码
package link;import static link.ListNode.print;public class SwapLinkNode {public static void main(String[] args) {ListNode node1 = new ListNode(1);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(3);ListNode node4 = new ListNode(4);node1.next = node2;node2.next = node3;node3.next = node4;System.out.println("=========交换前=========");print(node1);ListNode node = swapPairs(node1);System.out.println("=========交换后=========");print(node);}public static ListNode swapPairs(ListNode head) {// 空节点if (head == null) {return null;}// 只有一个节点if (head.next == null) {return head;}ListNode dummy = new ListNode();dummy.next = head;ListNode cur = dummy;while (cur.next != null && cur.next.next != null) {ListNode temp = cur.next;// 步骤1cur.next = temp.next;// 步骤2ListNode temp2 = cur.next.next;cur.next.next = temp;// 步骤3temp.next = temp2;// 每次循环往后移动两个节点cur = cur.next.next;}return dummy.next;}
}
结果
详解两两交换链表中的节点相关推荐
- LeetCode-链表-24. 两两交换链表中的节点
24. 两两交换链表中的节点 思路:使用一个头节点,然后用cur指针指向头 /*** Definition for singly-linked list.* struct ListNode {* in ...
- LeetCode 23合并K个升序链表24两两交换链表中的节点
维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...
- 力扣 两两交换链表中的节点
力扣 两两交换链表中的节点 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
- (补)20200328:两两交换链表中的节点(leetcode24)
两两交换链表中的节点 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 我们以给的例子1→2→3→4说明,因为只需要两两交换,因此最后得到2→1→4→3. 我们把过程写一下:1→2→3→4 到 ...
- 24.两两交换链表中的节点
24. 两两交换链表中的节点 方法一:迭代,虚拟头结点 class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy ...
- Leetcode(24)——两两交换链表中的节点
Leetcode(24)--两两交换链表中的节点 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: ...
- LeetCode 24.两两交换链表中的节点 C语言
题目 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3- ...
- 链表——24. 两两交换链表中的节点
1 题目描述 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 2 题目示例 示例 2: 输入 ...
- Python实现两两交换链表中的节点
题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. Leetcode原题地址:https://leetcode-cn. ...
- LeedCode 24:两两交换链表中的节点
两两交换链表中的节点 题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 链接: 24. 两两交换链表中的 ...
最新文章
- 腾讯发布最新开源jdk!
- python 栈和队列_Python实现栈和队列的简单操作方法示例
- 数据驱动:这是一种文化
- google hdr+_更好的隐私权控制使Google+死了
- Intel大玩CPU款式牌
- Problem C: 默认参数:求圆面积
- 花书+吴恩达深度学习(二五)直面配分函数(CD, SML, SM, RM, NCE)
- 没能 PK 掉 WiFi 的 Li-Fi,可能是 5G 请来的救兵
- vmVare使用NAT模式-配置详情
- 关于property grid下拉框的定制
- Java Swing 如何让界面更加美观
- QT QComboBox使用详解
- 服务器外接显卡不显示,RE: power edge T620按照第二块显卡,不能正常工作,操作系统中查看驱动程序安装正常,工作正常,外接显示器无独立信号...
- 解决Rabbitmq连接超时问题
- 【零散知识点总结2】
- Android软件测试外文文献,软件测试中英文对照外文翻译文献
- Android10/11 原生Launcher3深度定制开发
- 7-46 新浪微博热门话题
- 每日新闻:百度首个无人驾驶运营项目落户武汉;微软叫停Linux专利战;网易携手芬兰电信Elisa;瑞星华为联合发布云安全解决方案...
- 已知三角形三个顶点求内切圆和外接圆半径 以及面积 C语言模板
热门文章
- 电动汽车的种类有哪些?
- win10如何打开摄像头_win10中如何打开画图工具--win10专业版
- 常用选股公式编写样例
- ORACLE 19C 安装好的默认密码
- html5 背景图片自动换,网站背景图片自动切换特效css代码
- ssm毕设项目校园快递代取系统20f19(java+VUE+Mybatis+Maven+Mysql+sprnig)
- 这几个数据分析项目,让我看到了什么才叫专业!!
- phpspreadsheet生成Excel表格
- MySQL中 utf8 和 utf8mb4 的区别,以及 general_ci 、unicode_ci和unicode_520_ci的区别
- Linux命令之exit - 退出当前shell【返回值状态】