gwl999

博客园 首页 新随笔 联系 订阅 管理

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 2022-05-05 10:18  呓雫  阅读(33)  评论(0)    收藏  举报