gwl999

博客园 首页 新随笔 联系 订阅 管理
  34 随笔 :: 0 文章 :: 0 评论 :: 2103 阅读

5.4

两两交换链表中的节点

 

 

迭代方法:

  1. 这里需要四个指针,第一个指针记录开始的位置,最后返回出去,另外三个则需要在循环中位移和转换链表结点的方向

  2. 第一个临时结点,dummy 数值位0;即虚拟结点,dummy.next = head;

  3. 第二个结点pre是dummy同位置开始的结点,用来改变下一个结点的指向

  4. 第三个就是本身的head头结点;

  5. 第四个就是一个存放临时变量的结点

  1. 图片上就是具体方法:先用pre结点,临时存放第二个结点的位置,因为我们需要两两改变位置,就需要改变第二个值的下一个指针,所以将pre暂存第二个结点的位置

  2. 将第二个位置下个位置的指针保留,即tem = head.next.next;

  3. 第二个指针的下个位置改成前面的结点,同时,将本身第一个结点与第二个结点断开,也就是head.next.next =head;

  4. 将head结点的下一位指向第三位;

  5. 结束后再将pre和head指针后移

  6. 最后返回从原来的头结点记录的dummy的下一位开始

  7. 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;
      }
    }
posted on   呓雫  阅读(24)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示