1

我遇到了从链表的开头到结尾交换连续两个节点的问题。(例如,[1,2,3,4] 到 [2,1,4,3] 或 [1,2,3,4, 5] 到 [2,1,4,3,5]) 我发现指向指针解决方案的指针很难理解。谁能帮我解决以下代码

ListNode* swapPairs(ListNode* head) {
    ListNode **pp = &head, *a, *b;
    while ((a = *pp) && (b = a->next)) {
        a->next = b->next;
        b->next = a;
        *pp = b;
        pp = &(a->next);
    }
    return head;
}

我无法理解 *pp = b 行。为什么它只会将“head”更改为“b”但保持“a”不变?调试时,'a' 和 'head' 在此行之前是相同的。

4

0 回答 0