题目描述
(线性表)已知不带头结点的线性链表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
采用C++方式提交
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}LinkNode;
void Creat(LinkNode *&L,int n)
{
LinkNode *p,*r;
int i;
L=(LinkNode *)malloc(sizeof(LinkNode));
r=L;
for(i=0;i<n;i++)
{
p=(LinkNode *)malloc(sizeof(LinkNode));
scanf("%d",&p->data);
r->next=p;
r=p;
}
r->next=NULL;
}
void sort(LinkNode *&L)
{
LinkNode *p,*q;
int t;
for(p=L;p!=NULL;p=p->next)
{
for(q=p->next;q!=NULL;q=q->next)
{
if(p->data > q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
}
}
}
void Print(LinkNode *L)
{
while(L!=NULL)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
int main()
{
int m;
LinkNode *head;
scanf("m=%d",&m);
Creat(head,m);
sort(head->next);
Print(head->next);
sreturn 0;
}