Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 指向交换linkedlist节点中指针用法的指针_C_Singly Linked List_Pointer To Pointer - Fatal编程技术网

C 指向交换linkedlist节点中指针用法的指针

C 指向交换linkedlist节点中指针用法的指针,c,singly-linked-list,pointer-to-pointer,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->nex

我遇到了从链表的开始到结束交换连续两个节点的问题(例如[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;
}

我听不懂这一行。为什么它只把“头”改为“b”,而不去碰“a”?调试时,此行前面的“a”和“head”相同。

Er。因为它们是独立的变量?为什么设置一个变量会改变另一个变量(即使另一个变量恰好具有相同的值)?谢谢。我想我找到了原因。“a”和“head”的地址不同,pp只指向head。我只检查了“A”和“头”这是一个错误。请考虑回答你自己的问题。因为它们是独立的变量?为什么设置一个变量会改变另一个变量(即使另一个变量恰好具有相同的值)?谢谢。我想我找到了原因。“a”和“head”的地址不同,pp只指向head。我只检查了“A”和“头”这是一个错误。请考虑回答你自己的问题。