两两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

两两交换链表中的节点

思路

这道题目正常模拟就可以了。

建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。

接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序

初始时,cur指向虚拟头结点,然后进行如下三步:

两两交换链表中的节点

 

class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head==null ||head.next==null){
            return head;
        }
        ListNode dumyHead=new ListNode();
        dumyHead.next=head;
        ListNode cur=dumyHead;
        //这里的条件要注意一下 cur.next!=null && cur.next.next!=null
        while(cur.next!=null&&cur.next.next!=null){
            ListNode n1=cur.next;
            ListNode n2=cur.next.next;
            cur.next=n2;
            n1.next=n2.next;
            n2.next=n1;
            cur=n1;
        }
        return dumyHead.next;
    }
}

  

上一篇:算法中的各种O


下一篇:Java写快速排序