当前位置: 首页 > news >正文

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

24. 两两交换链表中的节点
#### 双指针
思路
指针pre、cur遍历链表,每次循环分别指向两个相邻的结点。指针link、tmp辅助实现两两交换。每次交换指针操作次数过多,较复杂,画图避免出错。

class Solution {public ListNode swapPairs(ListNode head) {if (head == null || head.next == null) {return head;}ListNode dummy = new ListNode(-1); // 虚拟头结点dummy.next = head;ListNode pre = head;ListNode cur = head.next;ListNode tmp = null;ListNode link = dummy; // 前一对结点的第二个结点,用于连接当前对结点while (cur != null && cur.next != null) {tmp = cur.next;cur.next = pre;link.next = pre.next;pre.next = tmp;link = pre;pre = tmp;cur = tmp.next;}return dummy.next;}
}

递归

思路
一个原问题可以转化为规模变小的子问题,没有其他变化,只有问题规模变小,可尝试用递归解决,实现相对简单,理解困难。
注意递归出口的情况不能少、不能多,递归体的关键是在解决子问题的基础上进一步解决原问题。

class Solution {// 返回链表结点交换后的头结点public ListNode swapPairs(ListNode head) {// 递归出口if (head == null || head.next == null) return head;// 递归体ListNode next = head.next; // head 指向第一个结点,next 指向第二个结点ListNode newNode = swapPairs(next.next);next.next = head;head.next = newNode;return next;}
}
http://www.hskmm.com/?act=detail&tid=33242

相关文章:

  • AI协科学家:技术革命还是安全噩梦?
  • 一个决定
  • 10月17日
  • npm镜像配置
  • 一些特性
  • ubuntu安装mysql
  • 计算机视觉技术与应用深度解析
  • AGC 板刷记录1
  • 2025.10.17总结
  • 记Windows 11环境Rust下载安装配置流程
  • K8s学习笔记(九) job与cronjob - 教程
  • [HZOI]CSP-S模拟33
  • [PaperReading] VLM2Vec-V2: Advancing Multimodal Embedding for Videos, Images, and Visual Documents
  • ShandongCCPC2024
  • 标悬浮展开多级菜单
  • Nimble:让SwiftObjective-C测试变得更优雅的匹配库 - 指南
  • 2025.10.17总结 - A
  • Ubuntu创建python桌面图标
  • 深入解析Pure恶意软件家族:从RAT到构建器再到开发者
  • Ubuntu上配置Flask应用程序的Nginx和uWSGI
  • 实验一 现代c++基础课程
  • 平均融资利率求法及ORACLE语法解析
  • [Linux]如何列出被软链接的文件,列出被链接位置
  • 10.13课后作业
  • 【Linux】基础 I/O - 指南
  • 不情愿算法学概论
  • DIVCNT
  • 3. JVM 运行时数据区
  • 软工学习日志
  • Pixelium Design:Vue3 的像素风 UI 组件库