以下为完整可运行示例代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef struct LNode{ 4 int data; 5 struct LNode *next; 6 }LNode; 7 LNode* creat(int n){ 8 LNode *Link; 9 LNode *p1,*p2; 10 int data; 11 Link=(LNode*)malloc(sizeof(LNode)); 12 p2=Link; 13 for(int i=0;i<n;++i){ //一共n个数 14 scanf("%d",&data); 15 p1=(LNode*)malloc(sizeof(LNode)); 16 p1->data=data; 17 p2->next=p1; 18 p2=p1; 19 } 20 p2->next=NULL; 21 return Link; 22 } 23 24 LNode* separate(LNode *&A){ 25 LNode *p1,*p2; //指针p2是原始混合数链表的哨兵指针,把p2扫描到的负整数存到p1结点 26 LNode *p; //p后连接p1结点 27 LNode *q1,*q2; //把p2扫描到的正整数存到q1结点,已经存完负整数的p后再连接一个个q1结点 28 p=(LNode*)malloc(sizeof(LNode)); 29 p2=A->next; 30 q2=A->next;//q2再重新扫描原始链表 31 while(p2!=NULL){ 32 if(p2->data<0){ 33 p1=(LNode*)malloc(sizeof(LNode)); 34 p1->data=p2->data; 35 p->next=p1; 36 p=p1; 37 p2=p2->next; //p2继续向后扫描 38 printf("%d",p->data); 39 printf(" "); 40 } 41 else 42 p2=p2->next; 43 } 44 while(q2!=NULL){ 45 if(q2->data>0){ 46 q1=(LNode*)malloc(sizeof(LNode)); 47 q1->data=q2->data; 48 p->next=q1; 49 p=q1; 50 q2=q2->next; 51 printf("%d",p->data); 52 printf(" "); 53 } 54 else 55 q2=q2->next; 56 } 57 printf("\n"); 58 return A; 59 } 60 void print(LNode *Link){ 61 LNode *p; 62 p=Link->next; 63 while(p!=NULL){ 64 printf("%d",p->data); 65 printf(" "); 66 p=p->next; 67 } 68 printf("\n"); 69 } 70 71 int main(){ 72 LNode *Link=NULL; 73 int num; 74 printf("共创建几个链表结点:"); 75 scanf("%d",&num); 76 printf("请输入链表结点:\n"); 77 Link=creat(num); 78 printf("已创建好的链表结点:"); 79 print(Link); 80 separate(Link); 81 return 0; 82 }
运行结果如下: