有一个单链表,其data成员存放整数,第一个节点的指针为头指针,编写一个程序,将其元素由小到大排列,并输出排序的结点
第一版,大家可以看看有什么问题
#include<stdio.h>
#include<malloc.h>
typedef struct node {
int data;
struct node* next;
}Lnode, * Llink;
void startlist(Llink &l)
{
l = new Lnode;
l->next = NULL;
}
void build(Llink& l)
{
printf("请输入该链表结点的个数:");
int n;
Lnode* q;
q = l;
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
Lnode *p= (Lnode*)malloc(sizeof(Lnode));
printf("请输入该链表中第%d个结点的值", i + 1);
scanf_s("%d", &p->data);
p->next = NULL;
q->next = p;
q = q->next;
}
}
void sort(Llink& l)
{
Lnode* p = l->next, * q, * r;
while (p != NULL)
{
q = l->next;
r = q->next;
while (r && q)
{
if (r->data < q->data)
{
int a = r->data;
r->data = q->data;
q->data = a;
}
q = q->next;
r = r->next;
}
p = p->next;
}
}
void print(Llink l)
{
Lnode* p = l->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
}
int main()
{
Llink l;
startlist(l);
build(l);
sort(l);
print(l);
return 0;
}
第一版运行结果