链表节点两两交换

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

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

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

public static ListNode swapParis(ListNode head){
        /*声明一个哑节点*/
        ListNode dumb=new ListNode(0);
        /*哑节点的下一个节点指向头节点*/
        dumb.next=head;
        /*声明一个引用指向哑节点*/
        ListNode temp=dumb;
        /*如果哑节点的下一个节点和下下一个节点不为空继续转换*/
        while (dumb.next!=null&&dumb.next.next!=null){
            /*要转换的第一个节点(称为curr)*/
            ListNode curr=dumb.next;
            /*要转换的第二个节点(称为next)*/
            ListNode next=dumb.next.next;
            /*指定curr的下一个是next的下一个*/
            curr.next=next.next;
            /*指定next的下一个是curr*/
            next.next=curr;
            /*指定哑节点的下一个是next*/
            dumb.next=next;
            /*哑节点引用指向哑节点的下下一个节点*/
            dumb=dumb.next.next;
        }
        /*返回哑节点的没改变引用的下一个节点*/
        return temp.next;
    }
View Code

代码中有注释。

猜你喜欢

转载自www.cnblogs.com/wuyouwei/p/11775842.html