单链表的拆分

来源:互联网 发布:intouch10.5软件下载 编辑:程序博客网 时间:2024/05/18 16:55
数据结构实验之链表五:单链表的拆分
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));//1L2 = (Node*)malloc(sizeof(Node));//2L = 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;}}


                                             
0 0
原创粉丝点击