单链表的拆分
2016-07-27 13:02
357 查看
数据结构实验之链表五:单链表的拆分
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
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
<pre name="code" class="cpp"># include <stdio.h> # include <stdlib.h> struct node{ int data; struct node *next; }; typedef struct node Node; Node* create_link_list(int len); int get_link_list_length(Node*L); void split_link_list(Node*L1,Node*L2,Node*L); void display_link_list(Node*L); int main() { int n,len,len1,len2; Node* L,*L1,*L2; scanf("%d",&n); /*区分结构体指针,和指向的节点*/ L1 = (Node*)malloc(sizeof(Node));//1 L2 = (Node*)malloc(sizeof(Node));//2 L = create_link_list(n); split_link_list(L1,L2,L); len1 = get_link_list_length(L1); len2 = get_link_list_length(L2); printf("%d %d\n",len1,len2); display_link_list(L1); display_link_list(L2); //display_link_list(L); //len=get_link_list_length(L); //printf("%d\n",len); return 0; } /*顺序建表*/ Node* create_link_list(int len) { Node*head; Node*tail; Node*p; head = (Node*)malloc(sizeof(Node)); tail = head; while(len--) { p = (Node*)malloc(sizeof(Node)); scanf("%d",&(p->data)); tail->next = p; tail = p; p->next = NULL; } return head; } void split_link_list(Node*L1,Node*L2,Node*L) { /*开始放在该函数中,错误!! L1 = (Node*)malloc(sizeof(Node)); L2 = (Node*)malloc(sizeof(Node)); error; */ Node*tail1,*tail2; Node*p; p = L->next; tail1 = L1; tail2 = L2; while(p) { if(p->data%2 == 0) { tail1->next = p; tail1 = p; p = p->next; } else { tail2->next = p; tail2 = p; p = p->next; } } tail1->next = NULL; tail2->next = NULL; } int get_link_list_length(Node*L) { int len=0; Node*p; p = L->next; while(p) { len++; p = p->next; } return len; } void display_link_list(Node*L) { Node*p; p = L->next; while(p) { if(p->next) { printf("%d ",p->data); } else { printf("%d\n",p->data); } p = p->next; } }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)