编写自定义函数:建立一个带有头结点head的有20个结点的链表,20个结点所需数值由随机数产生。编写自定义函数:建立两个链表,把存有数据的链表中的偶数存入一个链表,奇数存入另一个链表中。编写主函数调用上述两个函数并可输出三个链表中的数据。
完整的代码如下:
#include "iostream" using namespace std; #include "time.h" struct node { int data; node *next; }; node *head=NULL; void InsertNode(node* &head,int value) { if(head==NULL) { head=(node *)malloc(sizeof(node)); if(head==NULL) { printf("malloc failed"); return ; } else { head->data=value; head->next=NULL; } } else { node *temp=(node *)malloc(sizeof(node)); if(temp==NULL) { printf("malloc failed"); return ; } else { temp->data=value; temp->next=head; head=temp; } } return ; } void Insert(int n) { srand( (unsigned)time( NULL ) ); //初始化随机数 for(int i=0;i<n;i++) InsertNode(head,rand()); node *p=(node *)malloc(sizeof(node)); p->next=head; head=p; printf("所有的随机数为: "); p=head->next; //输出测试 while(p) { printf("%d ",p->data); p=p->next; } printf("/n/n"); return ; } void odd_even() { node *p=head->next; node *head_odd,*head_even,*q,*t; head_odd=NULL; head_even=NULL; while(p) { if(p->data%2==0) { if(head_even==NULL) { head_even=(node *)malloc(sizeof(node)); if(head_even==NULL) { printf("malloc failed"); return ; } else { head_even->data=p->data; head_even->next=NULL; q=head_even; } } else { node *temp=(node *)malloc(sizeof(node)); if(temp==NULL) { printf("malloc failed"); return ; } else { temp->data=p->data; q->next=temp; temp->next=NULL; q=q->next; } } } else { if(head_odd==NULL) { head_odd=(node *)malloc(sizeof(node)); if(head_odd==NULL) { printf("malloc failed"); return ; } else { head_odd->data=p->data; head_odd->next=NULL; t=head_odd; } } else { node *temp=(node *)malloc(sizeof(node)); if(temp==NULL) { printf("malloc failed"); return ; } else { temp->data=p->data; t->next=temp; temp->next=NULL; t=t->next; } } } p=p->next; } q=head_even; t=head_odd; printf("其中偶数为: "); while(q) { printf("%d ",q->data); q=q->next; } printf("/n/n"); printf("其中奇数为: "); while(t) { printf("%d ",t->data); t=t->next; } printf("/n/n"); } int main(void) { Insert(20); odd_even(); system("pause"); return 0; }
运行的结果如下: