#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <malloc.h>
struct cell {//单链表结点结构体定义
int x;
struct cell* next;
};
struct cell* build(void) {//新建单链表,并将建好的单链表首结点地址返回
struct cell* head, * tmp, * p;
head = tmp = p = NULL;
int n;
head = (struct cell*)malloc(sizeof(struct cell));
scanf("%d", &n);
if (n == 0)
return NULL;
else
{
head->x = n;
head->next = NULL;
p = head;
}
while (p->x != 0)
{
tmp = (struct cell*)malloc(sizeof(struct cell));
scanf("%d", &n);
tmp->x = n;
tmp->next = NULL;
p->next = tmp;
p = tmp;
}
return head;//返回单链表头
}
struct cell* sort(struct cell* head) {//递增排序链表,head是单链表首结点指针
struct cell* p, * p0, * r, * r0, * q;
p = p0 = r = r0 = q = NULL;
p = head;
if (p->x == 0)
{
return head;
}
else if (p->x != 0 && p->next->x == 0)
{
return head;
}
else
{
int flag = 1;
while (flag)
{
flag = 0;
p = head;
p0 = p;
p = p->next;
while (p->x != 0)
{
if ((p0->x) > (p->x))
{
flag = 1;
int a = p0->x;
p0->x = p->x;
p->x = a;
p = p->next;
p0 = p0->next;
}
else
{
p = p->next;
p0 = p0->next;
}
}
}
}
return head;
}
void print(struct cell* head) {
struct cell* p;
p = head;
if (head == NULL)
printf("NULL");
else
{
while (p->next != NULL)
{
if (p->x != 0)
{
printf("%d ", p->x);
p = p->next;
}
}
}
}
void release(struct cell* head) {
struct cell* p;
p = head;
if (p == NULL)
return;
while (head != NULL)
{
p = head;
head = head->next;
free(p);
}
}
int main(void) {
struct cell* head;
head = build();
if (head != NULL) {
head = sort(head);
print(head);
}
else
printf("NULL");
release(head);
return 0;
}