数据结构实验之链表五:单链表的拆分

来源:互联网 发布:linux输入中文 编辑:程序博客网 时间:2024/06/05 17:29

数据结构实验之链表五:单链表的拆分

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数。两个子链表中数据的相对次序与原链表一致。

Input

第一行输入整数N;;
第二行依次输入N个整数。

Output

第一行分别输出偶数链表与奇数链表的元素个数; 
第二行依次输出偶数子链表的所有数据;
第三行依次输出奇数子链表的所有数据。

Example Input

101 3 22 8 15 999 9 44 6 1001

Example Output

4 622 8 44 6 1 3 15 999 9 1001
在遍历的过程中将奇数放入新表,偶数留在原表即可。
#include<stdio.h>#include<stdlib.h>typedef struct node{    int data;    struct node *next;}*linkList;int count = 0;void creatList(linkList &L,int n){    struct node *p, *tail;    L =new node;    tail = L;    for(int i = 0; i < n; i++){        p = (struct node*)malloc(sizeof(struct node));        scanf("%d", &p->data);        p->next = NULL;        tail->next = p;        tail = p;    }};void outputData(linkList &L){struct node *p;p = L->next;    while(p){    if(p->next == NULL)    printf("%d\n", p->data);    else         printf("%d ", p->data);        p = p->next;    }}linkList chaifen(linkList head){linkList p, q;linkList head2, tail, tail2;head2 = new node;    head2->next = NULL;    tail2 = head2;    p = head->next;    head->next = NULL;    tail = head;    q = p->next;    while(p)    {        if(p->data % 2 != 0)        {            p->next = tail->next;            tail->next = p;            tail = p;            count ++;        }        else        {            p->next = tail2->next;            tail2->next = p;            tail2 = p;        }        p = q;        if(q)            q = q->next;    }    return head2;}int main(){    int n;    scanf("%d", &n);    linkList La, L;    creatList(La, n);    L = chaifen(La);    printf("%d %d\n", n-count, count);    outputData(L);    outputData(La);    return 0;}


原创粉丝点击