有序链表的拆分

    xiaoxiao2021-03-25  141

    链表五:单链表的拆分 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic

    Problem Description

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

    Input

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

    Output

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

    Example Input

    10 1 3 22 8 15 999 9 44 6 1001

    Example Output

    4 6 22 8 44 6 1 3 15 999 9 1001 #include<stdio.h> #include<stdlib.h> struct node {     int data;     struct node*next; }; int main() {     int n ,a = 0,b = 0;     struct node*head1,*head2,*p,*head,*q,*tail,*tail1,*tail2,*t;     head = (struct node*)malloc(sizeof(struct node));     head->next = NULL;     tail = head;     scanf("%d",&n); while(n--) {     p = (struct node*)malloc(sizeof(struct node));     p->next = NULL;     scanf("%d",&p->data);     tail->next = p;     tail = p; } head1 = (struct node*)malloc(sizeof(struct node)); head1->next = NULL; tail1 = head1; head2 = (struct node*)malloc(sizeof(struct node)); head2->next = NULL; tail2 = head2; q = head->next; while(q!=NULL) {     t = (struct node*)malloc(sizeof(struct node));     t->next = NULL;     t->data = q->data;     if((t->data)%2==0)     {         tail1->next =t;         tail1 = t;         a++;     }     else     {         tail2->next = t;         tail2 = t;         b++;     }     q = q->next; } printf("%d %d\n",a,b); p = head1->next; while(p) {     if(p->next)         printf("%d ",p->data);     else printf("%d\n",p->data);      p = p->next; } p = head2->next; while(p) {     if(p->next)         printf("%d ",p->data);     else printf("%d\n",p->data);      p = p->next; } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-17933.html

    最新回复(0)