Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法将单链表排序为3个不同的单链表_C_Sorting_Data Structures_Singly Linked List - Fatal编程技术网

C 无法将单链表排序为3个不同的单链表

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)

我有一个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)
        {
            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;
}