指向交换链表节点中指针使用的指针

时间:2016-06-25 21:45:52

标签: c singly-linked-list pointer-to-pointer

我遇到了从链接列表的开头到结尾交换连续两个节点的问题。(例如[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行。为什么它只会改变头部'到''但保持' a'不变?在调试时,' a'并且' head'在这一行之前是一样的。

0 个答案:

没有答案