swap in pairs

class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head == null) return null;
        
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode left = dummy;
        ListNode right = head;
        
        while(right != null && right.next != null){//这面的结束很tricky,每次循环结束 right都是指向最新的位置 为了保证下一轮运转整个过程中的合法性,我们注意观察:我们swap的必然是两个值节点 因此right.next!=null 而且最后停的位置是null,表示结束了即right != null.这两个条件缺一不可
            left.next = right.next;//由于链表的不可逆性 因此我们改变指向的时候一定要按结点的顺序走
            right.next = right.next.next;
            left.next.next = right;
            
            left = left.next.next;//可以试着把这两句提到前面三句前面,这样while的判断条件又要发生变化
            right = right.next;
        }
        return dummy.next;
    }
}
//right != null不一定right.next!=null
//right.next != null 一定可以保证right != null
//while里面的东西是要检视上一轮的结束是否越界和下一轮里 是否会出现不合法现象