链表从最小到最大排序

时间:2015-04-11 16:06:07

标签: 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;

}

1 个答案:

答案 0 :(得分:0)

在您遇到问题的循环中,您认为表达式t=t->nxt会怎么做?

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

一个简单的解决方案是做

t->nxt = t++ + 1;