本文共 1563 字,大约阅读时间需要 5 分钟。
数据结构实验之链表五:单链表的拆分
Time Limit: 1000 ms Memory Limit: 65536 KiBProblem Description
输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。 Input 第一行输入整数N;; 第二行依次输入N个整数。 Output 第一行分别输出偶数链表与奇数链表的元素个数; 第二行依次输出偶数子链表的所有数据; 第三行依次输出奇数子链表的所有数据。 Sample Input 10 1 3 22 8 15 999 9 44 6 1001 Sample Output 4 6 22 8 44 6 1 3 15 999 9 1001 Hint 不得使用数组!代码如下:
#include#include typedef struct node{ int data; struct node *next;} Node ;Node *creatList(int n){ Node *head,*p; int i; head=(Node *)malloc(sizeof(Node )); head->next=NULL; for(i=0;i data); p->next=head->next; head->next=p; } return head;}Node *split(Node *head1){ Node *head2,*p,*q; int cnt1=0,cnt2=0; head2=(Node *)malloc(sizeof(Node )); head2->next=NULL; p=head1->next; head1->next=NULL; q=p->next; while(p) { if(p->data%2==0) { p->next=head1->next; head1->next=p; cnt1++; } else { p->next=head2->next; head2->next=p; cnt2++; } p=q; if(q!=NULL) q=q->next; } printf("%d %d\n",cnt1,cnt2); return head2;}void Print(Node *head){ Node *s; s=head->next; while(s) { if(s->next==NULL) printf("%d\n",s->data); else printf("%d ",s->data); s=s->next; }}void main(){ int n; Node *head1,*head2,*s; scanf("%d",&n); head1=creatList(n); head2=split(head1); Print(head1); Print(head2);}
转载地址:http://wzhwi.baihongyu.com/