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; } }
浙公网安备 33010602011771号