合并两个排序的链表

合并两个排序的链表,第1张

合并两个排序的链表

您的代码过载,

if
插入-
s来处理“特殊”情况,这使它非常膨胀并且难以阅读。当您决定“按代码”处理特殊情况而不是找到“按数据”处理特殊情况时,通常会发生这种情况。大卫·惠勒(David
Wheeler)的声明说:“计算机科学中的所有问题都可以通过另一种间接解决方案来解决”。该“额外级别的间接”通常与列表配合使用,有助于显着减少由这些列表造成的混乱
if


为了说明上述内容,这是我的代码的样子

#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;}

有人可能会争辩说,在

pnext
指针中使用额外级别的间接寻址实际上会使代码更难以阅读。我同意对于新手来说,这种方法可能会遇到一些困难,但是对于有经验的程序员,这应该很容易理解。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5652435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存