【发布时间】:2015-08-09 13:38:57
【问题描述】:
我试图理解以下将两个排序的链接 lsits 合并为一个排序的链接列表的算法(取自 here)。
我不完全理解这段代码是如何工作的,很高兴得到解释。
代码:
#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;
}
【问题讨论】:
-
你为什么不用调试器单步调试代码呢?这应该有助于理解。
-
创建两个小列表,在调试器中逐行遍历合并代码,观察指针和它们指向的节点,将它们全部写在纸上。
-
我试过了(list1=1,5 and list2 = 3,7,9)但是很困惑:/
-
你需要改变路线。您不愿意为成为一名软件开发人员付出足够的努力。
-
我投票结束这个问题,因为“请解释我所有的代码”。