【发布时间】:2011-03-21 09:19:38
【问题描述】:
#define SWAP_PTRS(a, b) do { void *t = (a); (a) = (b); (b) = t; } while (0)
Node* MergeLists(Node* list1, Node* list2)
{
Node *list = NULL, **pnext = &list;
if (list2 == NULL)
return list1;
while (list1 != NULL)
{
if (list1->data > list2->data)
SWAP_PTRS(list1, list2);
*pnext = list1;
pnext = &list1->next;
list1 = *pnext;
}
*pnext = list2;
return list;
}
此代码来自这里,this question 的选择答案。
这里的 3 行我看不懂:
*pnext = list1;
pnext = &list1->next;
list1 = *pnext;
谁能帮帮我?给我解释一下?
已编辑:我可以更改这两行吗:
pnext = &list1->next;
list1 = *pnext;
到
list = list-> next;
【问题讨论】:
-
这不是 C++; SWAP_PTRS 宏在 C++ 中不起作用。 (它依赖于 void* 到 C++ 中不存在的任何指针类型的隐式转换。)
-
谢谢提醒。我已将标签更改为 C
标签: c pointers dereference