void sortlist()
{
struct node *a;
struct node *temp=head;
struct node *temp1=head->next;
while(temp!=NULL)
{
while(temp1->next!=NULL)
{
if(temp->data > temp1->data)
{
a->data=temp->data;
temp->data=temp1->data;
temp1->data=a->data;
}
else
{
temp1=temp1->next;
}
}
temp=temp->next;
}
}
//我是数据结构的新手。我在尝试对链表的元素进行排序时遇到了一些问题。列表没有得到排序。非常感谢任何帮助。
最佳答案
a
是一个未初始化的指针,所以行
a->data=temp->data;
调用未定义的行为。崩溃是这里最有可能的结果,因为您将尝试在一个未定义的地址写入内存,您的代码可能无法写入该地址,或者可能正在被您的程序的另一部分使用。
您可以通过为 a
提供与 temp->data
相同的类型来解决此问题。
void sortlist()
{
int a; // change type to match node->data if required
...
if(temp->data > temp1->data)
{
a=temp->data;
temp->data=temp1->data;
temp1->data=a
}
...
}
编辑:while(temp1->next!=NULL)
行中也存在潜在的 NULL 取消引用崩溃。下面的代码显示了 sortlist
的潜在实现,它避免了这种情况。
void sortlist()
{
struct node *ptr=head;
while(ptr!=NULL) {
struct node *next;
if (ptr == NULL)
return;
next = ptr->next;
while(next!=NULL) {
if(ptr->data > next->data) {
int a=ptr->data;
ptr->data=next->data;
next->data=a;
}
next = next->next;
}
ptr=ptr->next;
}
}
关于c - 从链表中排序元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17815939/