c - 链表从小到大排序

标签 c pointers linked-list

我正在尝试将链接列表中的数字从小到大排序。

但是它不起作用!

调试器说当我将第二个数字放入 列表(在主目录中)但我不知道为什么。

有什么帮助吗?

#include<stdio.h>

#include<stdlib.h>

typedef struct list list;

struct list{

    int a;

    list *nxt;
};

void sort(list *l){

    int temp,tp;
    list *AIDE,*k;
    k=AIDE=(list*)malloc(sizeof(list));
    while (l->nxt!= NULL)
    {

        while (l->nxt->a < l->a)
        {

            temp=l->a;
            l=l->nxt;
            l->nxt->a=temp;
            l=l->nxt;
            while (l->a < AIDE->nxt->a )
            {
                tp=AIDE->a;
                AIDE->a=l->a;
                AIDE->nxt->a=tp;
                AIDE=AIDE->nxt;

            }
        }
        l=l->nxt;
    }
    while (k->nxt!= NULL)
    {
        l->a=k->a;
        l=l->nxt;
        k=k->nxt;
    }
    l->nxt=NULL;
}

int main() {

    list *t,*s;
    int n,i,c=0;
    printf("\n how many number you need to enter? ");
    scanf("%d",&n);
    s=t=(list*)malloc(sizeof(list)*n);
        while (c!=n)
        {
            printf("\n Donner le nb %d :",c+1);
            scanf("%d",&t->a);
            t=t->nxt;
            c++;
        }
        t->nxt=NULL;
        sort(s);
        while (t->nxt!=NULL)
        {
            printf("%d",t->a);
        }
    return 0;

}

最佳答案

在出现问题的循环中,您认为表达式 t=t->nxt 会做什么?

当您进入循环时,t 指向已分配但未初始化 的内存,因此取消引用,例如t->nxt 将导致 undefined behavior .

一个简单的解决方案是例如做

t->nxt = t++ + 1;

关于c - 链表从小到大排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29579984/

相关文章:

iphone - 通过无线信号在两个设备之间进行实时同步

c - 哈希函数没有给出想要的结果

c++ - 使用带链表的复制构造函数

c - 将头节点添加到单链表会产生段错误

c - 关于 'strcpy'函数使用

c++ - 查找char指针所指向数据的大小

c - 将指针传递给结构数组时出错

c++ - 如果我们删除 [-Wreturn-local-addr] 可以吗(警告 : address of local variable returned) by using static keyword in c++?

c - 警告 : assignment makes integer from pointer without a cast in C

java - 如何从链表中删除重复的节点?