我遇到了从链表的开头到结尾交换连续两个节点的问题。(例如,[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' 在此行之前是相同的。