Swap Nodes in Pairs

Q: 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.

        ListNode *swapPairs(ListNode *head) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(!head) return head;
        ListNode *cur,*next,*prev;
        cur = head;
        prev = NULL;
        
        while(cur)
        {
            next = cur->next;
            if(!next)
            {
                if(prev)
                    prev->next = cur;
                else
                    head = cur;
                break;
            }else
            {
                cur->next = next->next;
                next->next = cur;
                if(prev)
                    prev->next = next;
                else
                    head = next;
                prev = cur;
                cur = cur->next;
            }
        }
        
        
        return head;
        
    }

  

posted @ 2013-06-15 21:06  summer_zhou  阅读(141)  评论(0编辑  收藏  举报