LeetCode

LeetCode-24 两两交换链表中的节点

nkul · 9月6日 · 2020年 50次已读

1、因为头结点要变,所以用虚拟头节点

2、注意交换的次序:

①下一轮交换是b->next,所以不能先修改b,而是最后修改

②唯一不受影响的dummy,先修改它

③交换a,b时,dummy指针总是指向a前节点,于是第一次交换完事后,dummy修改为a,因为此时的a是接下来交换的两个的前节点!

/**
 * 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) {
        auto dummy = new ListNode(-1);
        dummy->next = head;
        for(auto p = dummy;  p->next && p->next->next;){
            auto a= p->next,b = a->next;
            p->next = b;
            a->next = b->next;
            b->next = a;
            p = a;
        }
        return dummy->next;
    }
};


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!