我收到了我的链表:
typedef struct t_node {
ELEMLIST data;
struct t_node *next;
} NODE;
typedef NODE *LIST;
我尝试以有序的方式插入整数(从较小的数字到较大的数字),但似乎有些东西不起作用:
STATUS insertInOrderList(LIST *list, const ELEMLIST *pElem) {
NODE *newNode, *nodeIns;
newNode = getNode();//allocate memory
nodeIns = getNode();
//checkout getnode return
newNode->data = *pElem;
for (nodeIns = *list; nodeIns != NULL; nodeIns = nodeIns->next) {
if (cmpEleList(&newNode->data, &nodeIns->data) != 1) {
//if arg1 is not > arg2 it breaks the loop
break;
}
}
newNode->next = nodeIns;
nodeIns->next = newNode;
return OK;
}
当我运行它时,它只是告诉我我的列表是空的......
我确定这只是我错过的一些细节,但我无法意识到什么
答案 0 :(得分:0)
您的代码错误地执行了几项操作:
我完全不知道你的比较功能如何运作。代码似乎表明它返回1,只要列表第一个值比第二个值“更小”(这与大多数比较器的工作方式完全相反。大多数都这样做:
尽管如此,无论如何我都会改进你的算法。
STATUS insertInOrderList(LIST *list, const ELEMLIST *pElem)
{
NODE *newNode = getNode();
newNode->data = *pElem;
while (*list && cmpEleList(&(*list)->data, pElem) != 1)
list = &(*list)->next;
newNode->next = *list;
*list = newNode;
return OK;
}
这假设列表为空*list
将为NULL,并且分配成功。根据自己的意愿量身定制。祝你好运。