24. Swap Nodes in Pairs

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

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

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

 

/**
 * 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) {
        struct ListNode *tmphead,*ptr1,*ptr2;
        tmphead = new ListNode(0);
        ptr1 = new ListNode(0);
        ptr2 = new ListNode(0);
        tmphead->next = head;
        head = tmphead;

        while (head->next != NULL && head->next->next != NULL){
            ptr1 = head->next,ptr2 = head->next->next;
            //交換位置
            head->next = ptr2;     
            ptr1->next = ptr2->next;
            ptr2->next = ptr1;
            //更新待交換位置,因爲ptr1更換到後位置,因此head=ptr1
            head = ptr1;
   
        }
        return tmphead->next;
    }
};
相關文章
相關標籤/搜索