【LeetCode】24. Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

/**
 * 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) {
        if(head==NULL || head->next==NULL) return head;
          ListNode *pPrePre = NULL;
        ListNode *pPre = NULL;
         ListNode *p = head;
         
         while(p && p->next)
         {
             pPre = p;
             p = p->next;
             
             ListNode *pNext = p->next;
             
             if (pPre == head)
                 head = p;
                 
             if (pPrePre)
                 pPrePre->next = p;
                 
             p->next = pPre;
             pPre->next = pNext;
             
             pPrePre = pPre;
             p = pNext;
         }
         
         return head;
    }
};


你可能感兴趣的:(【LeetCode】24. Swap Nodes in Pairs)