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; }