题目描述 ~~~
将带有头结点的单向链表结点中的数据从小到大排序。
输入描述
第一行输入链表长度;第二行输入链表结点中的数据。
输出描述
排序后的链表(输出头结点,用“Head”表示)
用例输入 1
6
0 10 4 2 8 6
用例输出 1
Head->0->2->4->6->8->10
code:
#include<stdio.h>
#include<malloc.h>
typedef struct node{
int data;
struct node *next;
}List;
List *H;
int i=0,m;
List *Creat()
{
List *head,*s,*n;
int i=0,k;
head=(List*)malloc(sizeof(List));
head->next=NULL;
n=head;//将指针 n 设置为指向与 head 相同的节点。
//这很重要,因为 n 将用于遍历链表。
for(i=0;i<m;i++)
{
s=(List*)malloc(sizeof(List));
scanf("%d",&k);
s->data=k;
n->next=s;//当前节点与新建节点做链接
n=s;//更新n指针,即移动到链表的下一个节点
}
n->next=NULL;
return head;
}
void fun(List *head)
{
List *p,*q;
int temp;
for(p=head->next;p!=NULL;p=p->next)
for(q=head->next;q!=NULL;q=q->next)
{
if(p->data<q->data)//修改这里的比较条件,如果想从小到大或从大到小
{
temp=p->data;
p->data=q->data;
q->data=temp;
}
}
p=head->next;//存在的原因是,从第一个实际节点开始,也下面的循环相关联
printf("Head");
while(p!=NULL)
{
printf("->%d",p->data);
p=p->next;//移动到下一个节点,以便在循环中继续处理下一个节点
}
}
int main()
{
scanf("%d",&m);
int k[m];
H=Creat();
fun(H);
return 0;
}
Finally transparent