c - 从链表中排序元素

标签 c sorting data-structures linked-list

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/

相关文章:

java - 如何使用 BST 实现哈希表?

python - 有理由地运行以下功能的复杂性

c - 四叉树解释和C实现

c - 意外的 memcmp 返回值

c - 如何顺序修改数组中的值

ruby-on-rails - ruby/rails 根据字符串数组对记录数组进行排序

javascript - 排序后如何保持数组索引>值

C 关于指针的错误

sorting - 代码形式的批判 Real World Haskell,第 3 章练习

php - CakePHP 返回 find ('all' ) 使用 'id' 作为数组索引