思路:

 

 

1、由于head 节点可能产生变化,所以创建一个虚拟的头指针 dummy

2.p=dummy,a=p->next,b=p->next->next

3.交换

p->next=b;

a->next=b->next;

b->next=a;

p=a;

 

 

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        // ListNode* head1=new ListNode(0);
        // if(head==NULL) return head;

        // head1->next=head;
        // ListNode* p1=head;
        // ListNode* p2=head->next;
        // ListNode* h1=head1;

        // while(p2)
        // {
        //     p1->next=p2->next;
        //     p2->next=p1;
        //     h1->next=p2;

        //     h1=p1;
        //     p1=p1->next;
        //     if(p1)
        //     {
        //         p2=p1->next;
        //     }
        //     else 
        //     {
        //         break;
        //     }
        // }
        // return head1->next;

        auto dummy=new ListNode(-1);
        dummy->next=head;

        for(auto p=dummy;p->next && p->next->next;)
        {
            auto a=p->next,b=p->next->next;
            p->next=b;
            a->next=b->next;
            b->next=a;
            p=a;
        }
        return dummy->next;
    }
};