C 以有序的方式在链表中间插入一个元素?
我得到了我的链接列表:C 以有序的方式在链表中间插入一个元素?,c,linked-list,malloc,C,Linked List,Malloc,我得到了我的链接列表: typedef struct t_node { ELEMLIST data; struct t_node *next; } NODE; typedef NODE *LIST; 我尝试按顺序插入整数(从较小的数字到较大的数字),但似乎有些东西不起作用: STATUS insertInOrderList(LIST *list, const ELEMLIST *pElem) { NODE *newNode, *nodeIns; newNo
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;
}
当我运行它只是告诉我,我的名单是空的
我确信这只是我遗漏了一些细节,但我无法意识到您的代码有哪些地方做得不正确:
- 您正在分配两个节点;没有一个(这不是Java或C)
- 您没有考虑列表中的第一个节点可能已经“大于”传入节点的可能性
- 没有正确连接新节点
- 左侧<右侧:返回<0
- lhs==rhs:返回0
- 左侧>右侧:返回>0
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;
}
如果列表为空,则假定列表将为空,并且分配成功。根据您的意愿进行定制。祝您好运。
nodoIns
或nodeIns
?不相关:对于这个世界上所有的好处(而且不多),请不要在typedefs中隐藏指针,除非(a)你在写一个API,抽象出一个“句柄”类型,或者(b)你在声明一个函数指针类型。这是C。拥抱星号,对他们说些甜言蜜语。他们应该坐在前排。编辑,不管怎样,这不是问题哦,我知道不是。但这让你要求审查的人很难受。不用担心,只是一个问题(强)建议。不管怎样。第一个提示是doublegetNode()
。您正在插入一个节点,因此这本身就是一个很大的危险信号。谢谢,无论如何,完全是这样工作的……我真的不知道您在这种情况下做了什么……您增加了列表指针?@user3027143抱歉。刚才看到了您的问题。记住,列表
变量是指向指针的指针。要查看的条件检查如果(a)所指向的指针是非空的,如果是,则驱动该指针指向的节点的数据成员,并将其与pElem
进行比较。只要两者都为真,(存在非空的节点指针,并且它引用的数据“小于”参数),使用当前节点的下一个成员的地址加载列表
。基本上,它使用实际指针,而不仅仅是指针的值来遍历列表。