1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct Node{ 4 char data; 5 Node*next; 6 }Node,*LinkList; 7 Create(LinkList*L) 8 { 9 Node*t,*r; 10 char a,b; 11 *L=(LinkList)malloc(sizeof(Node)); 12 a=getchar();//要设置两个变量,其中一个负责吞掉间隔符 13 b=getchar(); 14 (*L)->data=a; 15 r=*L; 16 while(b!='\n') 17 { 18 a=getchar(); 19 b=getchar(); 20 t=(LinkList)malloc(sizeof(Node)); 21 t->data=a; 22 r->next=t; 23 r=t; 24 } 25 r->next=*L; 26 } 27 Seperate(LinkList L,LinkList*A,LinkList*B,LinkList*C)//先设头指针不存元素,最后再删掉该结点,另设头指针 28 { 29 Node*l,*a,*b,*c,*t; 30 *A=(LinkList)malloc(sizeof(Node)); 31 *B=(LinkList)malloc(sizeof(Node)); 32 *C=(LinkList)malloc(sizeof(Node)); 33 l=L,a=*A,b=*B,c=*C; 34 35 while(1) 36 { 37 t=(LinkList)malloc(sizeof(Node)); 38 t->data=l->data; 39 if('0'<=l->data&&l->data<='9') 40 { 41 a->next=t; 42 a=t; 43 } 44 else if('a'<=l->data&&l->data<='z') 45 { 46 b->next=t; 47 b=t; 48 } 49 else 50 { 51 c->next=t; 52 c=t; 53 } 54 55 l=l->next; 56 if(l==L)break;//一次性遍历完L 57 } 58 a->next=(*A)->next,b->next=(*B)->next,c->next=(*C)->next; 59 *A=a->next,*B=b->next,*C=c->next; //改变头指针位置,让头指针结点是存放元素的 60 } 61 Order(LinkList L) 62 { 63 Node*t=L->next; 64 printf("%c ",L->data); 65 while(t!=L) 66 { 67 printf("%c ",t->data); 68 t=t->next; 69 } 70 } 71 int main() 72 { 73 LinkList L,A,B,C; 74 Create(&L); 75 Seperate(L,&A,&B,&C); 76 Order(A); 77 printf("\n"); 78 Order(B); 79 printf("\n"); 80 Order(C); 81 return 0; 82 83 }