题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路:

如果想要改变某个节点的位置,作为单链表而言必须找到该节点的前一个节点,所以可以设置一个虚拟头结点dummyHead,让dummyHead.next指向head。然后就可以按照我途中的三个步骤开始写代码,这种题要自己把结构画出来,写代码能更直观
class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummyHead = new ListNode();
        dummyHead.next = head;
        ListNode cur = dummyHead;
        //如果是偶数节点,cur.next为空是终止条件;如果是奇数节点,cur.next.next为空是终止条件
        //并且顺序不能调换,否则会发生空指针异常
        while(cur.next != null && cur.next.next != null){  
            ListNode temp = cur.next;     //临时节点,防止cur.next节点丢失
            ListNode temp1 = cur.next.next.next;
            cur.next = cur.next.next;     //第1步
            cur.next.next = temp;         //第2步
            temp.next = temp1;            //第3步
            cur  = cur.next.next;
        }
        return dummyHead.next;
    }









