5.4
两两交换链表中的节点
迭代方法:
-
这里需要四个指针,第一个指针记录开始的位置,最后返回出去,另外三个则需要在循环中位移和转换链表结点的方向
-
第一个临时结点,dummy 数值位0;即虚拟结点,dummy.next = head;
-
第二个结点pre是dummy同位置开始的结点,用来改变下一个结点的指向
-
第三个就是本身的head头结点;
-
第四个就是一个存放临时变量的结点
-
图片上就是具体方法:先用pre结点,临时存放第二个结点的位置,因为我们需要两两改变位置,就需要改变第二个值的下一个指针,所以将pre暂存第二个结点的位置
-
将第二个位置下个位置的指针保留,即tem = head.next.next;
-
第二个指针的下个位置改成前面的结点,同时,将本身第一个结点与第二个结点断开,也就是head.next.next =head;
-
将head结点的下一位指向第三位;
-
结束后再将pre和head指针后移
-
最后返回从原来的头结点记录的dummy的下一位开始
-
class Solution { public ListNode swapPairs(ListNode head) { ListNode dummy =new ListNode (0); dummy.next = head; ListNode pre = dummy; while(pre.next != null&&pre.next.next!=null){ ListNode tem = head.next.next; pre.next =head.next; head.next.next = head; head.next = tem; pre = head; head=head.next; }return dummy.next; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)