题目

Swap Nodes in Pairs

思路

链表元素交换,这里的思路遵循了cleancode手册上的思路,为链表增加一个头节点,然后以从头节点开始的三个节点作为一组来进行交换。这里主要考虑的是边界问题。

将新增的头节点作为pre,head作为p,仅当p不为空并且p之后有节点是才进行交换。

下面的交换就是普通的链表next的赋值,但需要重新定位,以便能进行下一次循环。

代码

/**
 * 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) {
       ListNode *dump = new ListNode(0);
       ListNode *pre = dump;
       dump -> next = head;
       ListNode *p = head;
       while(p && p -> next){
            ListNode *q = p -> next;
            ListNode *r = q -> next;
            pre -> next = q;
            q -> next = p;
            p -> next = r;
            pre = p;
            p = r;
       }
       return dump -> next;
    }
};