Swap-nodes-in-pairs

https://leetcode.com/problems/swap-nodes-in-pairs/

Description

Swap-nodes-in-pairs

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

Example 1:

Input: head = [1,2,3,4]
Output: [2,1,4,3]

Example 2:

Input: head = []
Output: []

Example 3:

Input: head = [1]
Output: [1]

Constraints:

  • The number of nodes in the list is in the range [0, 100].

  • 0 <= Node.val <= 100

Follow up: Can you solve the problem without modifying the values in the list's nodes? (i.e., Only nodes themselves may be changed.)

Solution & follow up

solution

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(!head)
            return nullptr;
        auto temphead =  head;
        while(temphead && temphead->next){ //if pair exist 
            swap(temphead->val , temphead->next->val); // swap node val
            temphead = temphead->next->next; // move to another pair
        }
        return head;
    }
};

follow up

class Solution {
public:
    ListNode* swapPairs(ListNode* head) { 
        if (!head || !(head -> next)) return head;
        ListNode* new_head = new ListNode(0);
        new_head -> next = head;
        ListNode* pre = new_head; 
        ListNode* cur = head;
        while (pre -> next && cur -> next) {
            pre -> next = cur -> next;
            cur -> next = cur -> next -> next;
            pre -> next -> next = cur;
            pre = cur;
            cur = pre -> next;
        }
        return new_head -> next;
    }
};

最后更新于

这有帮助吗?