Holds the data which are less than 5 "list_-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:31:04 25 4
gpt4 key购买 nike

我有一个 splitter=5,我想通过 splitter 对单链表的数据进行排序。喜欢

"list_1" -> Holds the data which are less than 5

"list_2" -> Holds thedata which are equal to 5

"list_3" -> Holds the data which are greater than 5

但是在调用排序函数时,它会退出且没有任何错误。

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;
}

我的函数调用

int main()
{
int options;
do
{
printf("\n 1.Create node");

printf("\n 6.Display");

printf("\n 3.Display Sorted");
printf("\n 4.Sort the given list");
printf("\n Enter you choice \n");
scanf("%d",&options);

switch (options)
{
case 1:
start = create(start);
break;

case 2:
display(start);
break;

case 3:
start = display_sorted(start_1,start_2,start_3);
break;
case 4:
start = sort(start);
break;
default:
break;
}
}while(options!=13);
}

最佳答案

您的insert_end函数是错误的。

在下面的代码中,您将进行迭代,直到 ptr 变为 NULL,然后取消引用 ptr。这将会失败(即未定义的行为)。

    ptr = start;
while (ptr!= NULL) // Will continue until ptr is NULL
{
ptr=ptr->next;
}
ptr->next=new_node; // Ups - dereference of NULL pointer

也许可以尝试:

    while (ptr->next != NULL)

另一个观察结果是,您从不使用 insert_end 返回的值。这可能是一个错误。

也许你想做:

start_1 = insert_end(start_1, ptr->data);

此外,sort 存在问题 - 你永远不会更改 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;
}

关于c - 无法将单链表排序为 3 个不同的单链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49595588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com