您的代码过载,
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指针中使用额外级别的间接寻址实际上会使代码更难以阅读。我同意对于新手来说,这种方法可能会遇到一些困难,但是对于有经验的程序员,这应该很容易理解。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)