前言

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;}
}

结果

详解两两交换链表中的节点相关推荐

  1. LeetCode-链表-24. 两两交换链表中的节点

    24. 两两交换链表中的节点 思路:使用一个头节点,然后用cur指针指向头 /*** Definition for singly-linked list.* struct ListNode {* in ...

  2. LeetCode 23合并K个升序链表24两两交换链表中的节点

    维护不易,点赞再看,感谢支持 合并K个升序链表 题目描述 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1 ...

  3. 力扣 两两交换链表中的节点

    力扣 两两交换链表中的节点 题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  4. (补)20200328:两两交换链表中的节点(leetcode24)

    两两交换链表中的节点 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 我们以给的例子1→2→3→4说明,因为只需要两两交换,因此最后得到2→1→4→3. 我们把过程写一下:1→2→3→4 到 ...

  5. 24.两两交换链表中的节点

    24. 两两交换链表中的节点 方法一:迭代,虚拟头结点 class Solution {public ListNode swapPairs(ListNode head) {ListNode dummy ...

  6. Leetcode(24)——两两交换链表中的节点

    Leetcode(24)--两两交换链表中的节点 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 1: ...

  7. LeetCode 24.两两交换链表中的节点 C语言

    题目 24.两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3- ...

  8. 链表——24. 两两交换链表中的节点

    1 题目描述 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 2 题目示例 示例 2: 输入 ...

  9. Python实现两两交换链表中的节点

    题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. Leetcode原题地址:https://leetcode-cn. ...

  10. LeedCode 24:两两交换链表中的节点

    两两交换链表中的节点 题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 链接: 24. 两两交换链表中的 ...

最新文章

  1. 腾讯发布最新开源jdk!
  2. python 栈和队列_Python实现栈和队列的简单操作方法示例
  3. 数据驱动:这是一种文化
  4. google hdr+_更好的隐私权控制使Google+死了
  5. Intel大玩CPU款式牌
  6. Problem C: 默认参数:求圆面积
  7. 花书+吴恩达深度学习(二五)直面配分函数(CD, SML, SM, RM, NCE)
  8. 没能 PK 掉 WiFi 的 Li-Fi,可能是 5G 请来的救兵
  9. vmVare使用NAT模式-配置详情
  10. 关于property grid下拉框的定制
  11. Java Swing 如何让界面更加美观
  12. QT QComboBox使用详解
  13. 服务器外接显卡不显示,RE: power edge T620按照第二块显卡,不能正常工作,操作系统中查看驱动程序安装正常,工作正常,外接显示器无独立信号...
  14. 解决Rabbitmq连接超时问题
  15. 【零散知识点总结2】
  16. Android软件测试外文文献,软件测试中英文对照外文翻译文献
  17. Android10/11 原生Launcher3深度定制开发
  18. 7-46 新浪微博热门话题
  19. 每日新闻:百度首个无人驾驶运营项目落户武汉;微软叫停Linux专利战;网易携手芬兰电信Elisa;瑞星华为联合发布云安全解决方案...
  20. 已知三角形三个顶点求内切圆和外接圆半径 以及面积 C语言模板

热门文章

  1. 电动汽车的种类有哪些?
  2. win10如何打开摄像头_win10中如何打开画图工具--win10专业版
  3. 常用选股公式编写样例
  4. ORACLE 19C 安装好的默认密码
  5. html5 背景图片自动换,网站背景图片自动切换特效css代码
  6. ssm毕设项目校园快递代取系统20f19(java+VUE+Mybatis+Maven+Mysql+sprnig)
  7. 这几个数据分析项目,让我看到了什么才叫专业!!
  8. phpspreadsheet生成Excel表格
  9. MySQL中 utf8 和 utf8mb4 的区别,以及 general_ci 、unicode_ci和unicode_520_ci的区别
  10. Linux命令之exit - 退出当前shell【返回值状态】