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) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(head==NULL)return NULL;
        else{
            if(head->next==NULL)return head;
            else{
                ListNode* ret;
                ListNode* temp;
                ListNode* ptr;
                ret=head->next;
                temp=ret->next;
                ret->next=head;
                ptr=ret->next;
                ptr->next=temp;
                while(ptr->next!=NULL){
                    if(ptr->next->next==NULL)break;
                    else{
                        temp=ptr->next;
                        ptr->next=ptr->next->next;
                        temp->next=ptr->next->next;
                        ptr->next->next=temp;
                        ptr=ptr->next->next;
                    }
                }
                return ret;
            }
        }
    }
};

 

posted @ 2013-09-17 21:50  懒猫欣  阅读(142)  评论(0编辑  收藏  举报