#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, * tail;
head = tmp = tail = NULL;
int n;
scanf("%d", &n);
if (n == 0)
return head;
else
{
head = (struct cell*)malloc(sizeof(struct cell));
head->x = n;
head->next = NULL;
tail = head;
while (tail->x != 0)
{
tmp = (struct cell*)malloc(sizeof(struct cell));
scanf("%d", &n);
tmp->x = n;
tmp->next = NULL;
tail->next = tmp;
tail = 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;
while (p->x != 0)
{
r = head;
while ((r->x < p->x) && (r != p))
{
r0 = r;
r = r->next;
}
if (r != p)
{
q = p;
p0->next = p->next;
p = p0;
if (r == head)
{
q->next = head;
head = q;
}
else
{
q->next = r;
r0->next=q;
}
}
p0 = p;
p = p->next;
}
return head;
} /* sort */
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 (head == NULL)
;
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;
}