数据结构实验之链表五:单链表的拆分
2016-07-28 15:56
232 查看
数据结构实验之链表五:单链表的拆分
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。
输入
第一行输入整数N;;第二行依次输入N个整数。
输出
第一行分别输出偶数链表与奇数链表的元素个数; 第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。
示例输入
10 1 3 22 8 15 999 9 44 6 1001
示例输出
4 6 22 8 44 6 1 3 15 999 9 1001
提示
不得使用数组!#include<stdio.h> #include<iostream> using namespace std; struct node { int d; node *next; }; node *CreatList(int n) //顺序建表 { node *head=new node; head->next=NULL; node *tail=head; for(int i=0;i<n;i++) { node *p=new node ; cin>>p->d; tail->next=p; tail=p; } tail->next=NULL; return head; } void PrintList(node *head) //输出链表 { node *p=head->next; while(p!=NULL) { if(p->next==NULL) cout<<p->d<<endl; else cout<<p->d<<" "; p=p->next; } } node *SplitList(node *h1) //拆分链表 { int n=0,m=0; node *h2=new node; h2->next=NULL; node *p=h1->next; h1->next=NULL; node *tail2=h2; node *tail1=h1; while(p!=NULL) { if(p->d%2) { tail1->next=p; tail1=p; n++; } else { tail2->next=p; tail2=p; m++; } p=p->next; } tail1->next=NULL;<span style="white-space:pre"> </span>//注意别忘了 tail2->next=NULL; cout<<m<<" "<<n<<endl; PrintList(h2); PrintList(h1); } int main() { int n; cin>>n; node *head=NULL; head=CreatList(n); SplitList(head); return 0; }
相关文章推荐
- 数据结构与算法JavaScript - 集合
- [从头学数学] 第251节 Python实现数据结构:二叉查找树
- 最长公共子序列求解:递归与动态规划方法
- 前端接口的数据结构
- 选择排序
- 数据结构与算法JavaScript - 散列
- java数据结构之子最大子数组和
- 数据结构实验之栈五:下一较大值(一)
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- SDUT2131数据结构实验之栈一:进制转换(栈)
- 数据结构实验之栈一:进制转换
- 重温数据结构(一)
- 有序链表的建立
- POJ 2442 优先队列
- 数据结构与算法JavaScript - 字典
- Linux内核之数据结构--链表
- 数据结构——红黑树
- KMP算法(重点next数组计算)
- MySQL索引背后的数据结构及算法原理
- 数据库数据结构优化