C 无法将单链表排序为3个不同的单链表
我有一个splitter=5,我想用splitter对单链表的数据进行排序。像 “列表_1”->保存小于5的数据 “列表2”->保存等于5的数据 “列表_3”->保存大于5的数据 但是,在调用sort函数时,它会毫无错误地退出C 无法将单链表排序为3个不同的单链表,c,sorting,data-structures,singly-linked-list,C,Sorting,Data Structures,Singly Linked List,我有一个splitter=5,我想用splitter对单链表的数据进行排序。像 “列表_1”->保存小于5的数据 “列表2”->保存等于5的数据 “列表_3”->保存大于5的数据 但是,在调用sort函数时,它会毫无错误地退出 nodal *sort(nodal *start) { struct node *ptr; ptr=start; while(ptr!=NULL) { if(ptr->data<splitter)
nodal *sort(nodal *start)
{
struct node *ptr;
ptr=start;
while(ptr!=NULL)
{
if(ptr->data<splitter)
{
start_1=insert_end(start_1,ptr->data);
}
else if(ptr->data==splitter)
{
start_2=insert_end(start_2,ptr->data);
}
else
{
start_3=insert_end(start_3,ptr->data);
}
}
return start;
}
nodal *insert_end(nodal *start,int num)
{
nodal *new_node,*ptr;
new_node = (nodal *)malloc(sizeof(nodal));
new_node->data=num;
if(start==NULL)
{
new_node->next=NULL;
start=new_node;
}
else
{
new_node->next=NULL;
ptr = start;
while (ptr!= NULL)
{
ptr=ptr->next;
}
ptr->next=new_node;
}
return start;
}
您的
insert\u end
函数错误
在下面的代码中,您迭代直到ptr
变为NULL,然后取消引用ptr
。这将失败(即未定义的行为)
或许可以尝试:
while (ptr->next != NULL)
另一个观察结果是,您从未使用insert\u end
返回的值。这可能是个错误
也许你想做:
start_1 = insert_end(start_1, ptr->data);
此外,排序
中存在问题-您永远不会更改ptr
while(ptr!=NULL)
{
if(ptr->data<splitter)
{
start_1=insert_end(start_1,ptr->data);
}
else if(ptr->data==splitter)
{
start_2=insert_end(start_2,ptr->data);
}
else
{
start_3=insert_end(start_3,ptr->data);
}
// This line is missing
ptr = ptr->next;
}
while(ptr!=NULL)
{
if(ptr->datadata);
}
else if(ptr->data==拆分器)
{
开始\u 2=插入\u结束(开始\u 2,ptr->数据);
}
其他的
{
开始\u 3=插入\u结束(开始\u 3,ptr->数据);
}
//这一行不见了
ptr=ptr->next;
}
您能提供您的输入示例吗?您也在使用全局变量吗?重要的是,还要提供调用sort函数的上下文,因为您可能要传递一个空指针以开始。@AJD输入是int值。是的,我使用的是全局变量拆分器=5。我调用的排序函数类似于start=sort(start)。并且start全局声明为nodal*start=NULL;节点*start_2=NULL;节点*start_1=NULL;节点*start_3=NULL<代码>printf(“\n 6.显示”)代码>->printf(“\n 2.显示”)代码>@shobhit:将这些细节添加到您的问题中将有助于将来的答案。干杯。这只是打字错误@4386427我自己称之为2。@SHOBHITSRIVASTAVA17BIT0292您的描述不清楚。您所说的无误退出是什么意思?您期望出现什么错误?它没有显示任何输出。我期待菜单后,因为我使用的是菜单驱动程序,所以在执行排序功能后,它应该显示菜单,但它只是退出。检查问题的更新我也在问题中插入了菜单,请检查。@SHOBHITSRIVASTAVA17BIT0292查看更新的答案。您还应该发布显示_排序
功能
start_1 = insert_end(start_1, ptr->data);
while(ptr!=NULL)
{
if(ptr->data<splitter)
{
start_1=insert_end(start_1,ptr->data);
}
else if(ptr->data==splitter)
{
start_2=insert_end(start_2,ptr->data);
}
else
{
start_3=insert_end(start_3,ptr->data);
}
// This line is missing
ptr = ptr->next;
}