#include"pro2.h"
bool Creat(LinkList*&L)
{
LNode* p,* q;
int n;
p=q=L = (LNode*)malloc(sizeof(LNode));
if (L == NULL||p==NULL||q==NULL)
return false;
L->next = NULL;
q = L;
printf("你想输入多少个字符:\n");
cin>> n;
printf("请输入字符:\n");
for (int i = 0; i {
cin >> p->data;
p->next = q->next;
q->next = p;
q = p;
}
return true;
}
bool CreatNULL(LinkList*& L)
{
L = (LinkList*)malloc(sizeof(LinkList));
if (L == NULL)
return false;
L->next = NULL;
return true;
}
void PrintList(LinkList * L)//输出单链表
{
LNode* p = L->next;//定义头结点
printf("\n");
while (p != NULL)
{
printf("%c", p->data);//输出单链表中的data数据
p = p->next;//遍历至下一个结点
}
printf("\n");
}
bool seperate(LinkList* &L, LinkList* &LA, LinkList* &LB, LinkList* &LC) //拆分链表
{
//L是原始单链表,分割后的三个链表是LA(数字)、LB(小写字母)、LC(大写字母)
LNode* pa, * pb, * pc;
LNode* p = L->next; //原始链表遍历指针
pa = LA= (LNode*)malloc(sizeof(LNode));//分配空间
pb = LB = (LNode*)malloc(sizeof(LNode));
pc = LC = (LNode*)malloc(sizeof(LNode));
//pa,pb,pc分别是三个新链表的尾指针,初始时指向各表头结点
if (pa == NULL || pb == NULL || pc == NULL)
return false;
while (p != NULL)
{
if (p->data >= '0' && p->data {
pa->next = p;
pa = p;
}
else if (p->data >= 'a' && p->data {
pb->next = p;
pb = p;
}
else if(p->data>='A'&& p->data {
pc->next = p;
pc = p;
}
p = p->next;
}
//使链表最后一个结点的指针域指向空
pa->next = NULL;
pb->next =NULL ;
pc->next = NULL;
return true;
}
int main()
{
LinkList* L, * L1, * L2, * L3;
L1 = (LinkList*)malloc(sizeof(LinkList));
L2 = (LinkList*)malloc(sizeof(LinkList));
L3 = (LinkList*)malloc(sizeof(LinkList));
Creat(L);
PrintList(L);
CreatNULL(L1);
CreatNULL(L2);
CreatNULL(L3);
seperate(L, L1, L2, L3);
PrintList(L1);
PrintList(L2);
PrintList(L3);
return 0;
}