2210: 链表排列(线性表)

2210: 链表排列(线性表)

时间限制: 1 Sec  内存限制: 128 MB
提交: 61  解决: 30
[提交][状态][讨论版][命题人:外部导入]

题目描述

(线性表)已知不带头结点的线性链表list,链表中结点构造为(data、link),其中data为数据域,link为指针域。请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。要求链接过程中不得使用除该链表以外的任何链结点空间。

输入

m=5

3 1 5 4 6

输出

1 3 4 5 6

样例输入

m=8

10 1 5 14 32 55 67 6

样例输出

1 5 6 10 14 32 55 67 

#include<stdio.h>
#include<malloc.h>
typedef struct node
{
    int data;
    struct node *next;
}list;
int a[100];
list *createList(int m, int a[])
{
    int i;
    list *p, *r, *L;
    L = (list *)malloc(sizeof(list));
    r = L;
    for(i = 0; i < m; ++i)
    {
        p = (list *)malloc(sizeof(list));
        p->data = a[i];
        r->next = p;
        r = p;
    }
    r->next = NULL;  //问题的关键
    return L;
}
int main()
{
    int m, i, temp;
    list *L, *p, *q;
    scanf("m=%d", &m);
    for(i = 0; i < m; ++i)
        scanf("%d", &a[i]);
    L = createList(m, a);
    for(p = L->next; p != NULL; p = p->next)
    {
        for(q = p->next; q != NULL; q = q->next)
        {
            if(p->data > q->data)
            {
                temp = q->data;
                q->data = p->data;
                p->data = temp;
            }
        }
    }
    for(p = L->next; p != NULL; p = p->next)
        printf("%d ", p->data);
    printf("\n");
    return 0;
}

  

 
posted @ 2018-11-07 13:12  青衫客36  阅读(672)  评论(0编辑  收藏  举报