【Leetcode】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) {
        ListNode *pre = new ListNode(0);
        pre->next = head;
        ListNode *cur = head;
        
        ListNode * result = pre;
        
        if(cur == nullptr)
            return head;
        
        while(cur != nullptr)
        {
            ListNode *ne = cur->next;
            if(ne == nullptr)
                return result->next;
            pre->next = ne;
            cur->next = ne->next;
            ne->next = cur;
            
            pre = cur;
            cur = cur->next;
        }
        
        return result->next;
    }
};


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