24. Swap Nodes in Pairs

来源:互联网 发布:飞机票网上预订软件 编辑:程序博客网 时间:2024/06/03 21:56

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.

这道题不许使用额外的空间,也不许改变节点的val值,因此只能通过指针操作来交换。

/** * 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) {        if (head == NULL) return NULL;        if (head->next == NULL) return head;        ListNode dummyNode = ListNode(0);        ListNode* dummy = &dummyNode;        dummy->next = head;        ListNode* pre = dummy;        ListNode* a = head;        ListNode* b = head->next;        head = head->next;        while(1) {            a->next = b->next;            b->next = a;            pre->next = b;            if (a->next == NULL) break;            if (a->next->next == NULL) break;            b = a->next->next;            a = a->next;            pre = pre->next->next;        }        return head;    }};
原创粉丝点击