//现在的主要问题是,排序的列表中不能出现0,原因是与NULL冲突。
#include <stdio.h>
#include <stdlib.h>
#define MAX 999999
typedef struct LNode//重命名struct LNode为LNode
{
int data;
LNode* next;//在结构体中可以直接使用新名字LNode
}LNode;
void CreateLinklist(LNode*& head)
{
printf("请输入数字创建链表,以9999结束。\n");
head = (LNode*)malloc(sizeof(LNode));
head->next = nullptr;
LNode* flag;
flag = head;
int t;
scanf_s("%d", &t);
while (t != 9999)
{
flag->data = t;
flag->next = (LNode*)malloc(sizeof(LNode));
flag = flag->next;
scanf_s("%d", &t);
}
flag->next = nullptr;
flag = head;
}
void printLinklist(LNode* p)
{
if (p->data == NULL)
printf("链表为空。\n");
else
{
printf("链表的结构为:\n");
while (p->next != nullptr)
{
printf("%d", p->data);
p = p->next;
if (p->next != nullptr)
printf(" -> ");
}
}
}
void CopyLinklist(LNode*& head, LNode* b)
{
head = (LNode*)malloc(sizeof(LNode));
head->next = nullptr;
LNode* flag;
flag = head;
while (b->next != nullptr)
{
flag->data = b->data;
flag->next = (LNode*)malloc(sizeof(LNode));
flag = flag->next;
b = b->next;
}
flag->next = nullptr;
flag = head;
}
void sort(LNode*& headA, LNode* p)
{
LNode* copy;
CopyLinklist(copy, p);
headA = (LNode*)malloc(sizeof(LNode));
headA->next = nullptr;
LNode* flagA;
LNode* flagB;
LNode* flagC;
flagA = headA;
flagB = copy;
flagC = copy;
int g;
int num = 0;
while (copy->next != nullptr)
{
copy = copy->next;
num++;
}
printf("该排序链表共有%d个结点。\n", num);
copy = flagB;
g = copy->data;
if (num == 0)
printf("该排序链表为空!");
else
{
while (num > 0)
{
while (copy->next != nullptr)
{
if (g > copy->data && copy->data != NULL)
{
g = copy->data;
flagC = copy;
}
copy = copy->next;
}
flagC->data = MAX;//将当前最小值设为一个原链表绝对不可能达到的极大值
flagA->data = g;
flagA->next = (LNode*)malloc(sizeof(LNode));
flagA = flagA->next;
flagA->next = nullptr;
copy = flagB;
g = MAX;
num--;
}
flagA = headA;
}
}
int main()
{
LNode* LA;
CreateLinklist(LA);
printf("\n");
printLinklist(LA);
printf("\n");
printf("\n");
LNode* LB;
sort(LB , LA);
printf("\n");
printLinklist(LB);
printf("\n");
printLinklist(LA);
return 0;
}
现在的主要问题是,排序的列表中不能出现0,原因是与NULL冲突。