【发布时间】:2013-05-30 20:19:43
【问题描述】:
此函数获取指向列表中“虚拟”项(第一项)的指针和一个struct 键入的“节点”以添加...
但它进入了一个无限循环......怎么了???
void listAdd(Node* dummy, Node tmpNode) {
Node* toAdd = (Node*)malloc(sizeof(Node));
*toAdd = tmpNode;
Node *tmp1,*tmp2;
tmp1 = dummy;
tmp2 = (*dummy).next;
while (tmp1 != NULL){
if ( ((*tmp1).info.id < (*toAdd).info.id && (*tmp2).info.id > (*toAdd).info.id ) || (tmp2==NULL) ) {
(*toAdd).next = (*tmp1).next;
(*tmp1).next = toAdd;
return;
}
tmp1 = (*tmp1).next;
tmp2 = (*tmp2).next;
}
}
【问题讨论】:
-
为什么要遍历整个列表以将
tmpNode添加到列表中?通常,当您有一个链表并且想要向其中添加一个节点时,您可以将它添加到前面。这样更有效率。顺便说一句,dummy不是一个好名字。像head这样的东西会更好。 -
可读性提升:
(*tmp1).info是tmp1->info等 -
然后为您解答。我正在通过其 ID 字段将节点添加到他的位置 - 它需要以这种方式排序。
-
您是否只使用
listAdd将元素添加到列表中?如果是这样,您如何创建初始空列表?