sdut oj資料結構實驗之連結串列五:單鏈表的拆分
阿新 • • 發佈:2019-02-20
資料結構實驗之連結串列五:單鏈表的拆分
Time Limit: 1000MS Memory Limit: 65536KBProblem 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
Hint
不得使用陣列!程式碼實現:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> using namespace std; int num1 = 0,num2 = 0; typedef int element; struct node { element data; node *next; }*head1,*head2; node *Creat(int n) { node *head,*tail,*p; head = new node; head->next = NULL; tail = head; while(n--) { p = new node; scanf("%d",&p->data); tail->next = p; p->next = NULL; tail = p; } return head; } void Inverse(node *head) { node *p,*q,*tail1,*tail2; head1 = new node; head2 = new node; head1->next = NULL; head2->next = NULL; tail1 = head1; tail2 = head2; p = head->next; while(p) { q = p->next; if(p->data%2 == 0) { tail1->next = p; p->next = NULL; tail1 = p; p = q; num1++; } else { tail2->next = p; p->next = NULL; tail2 = p; p = q; num2++; } } } void display(node *head) { node *p; p = head->next; while(p) { if(p->next) printf("%d ",p->data); else printf("%d\n",p->data); p = p->next; } } int main() { node *head; int n; scanf("%d",&n); head = Creat(n); Inverse(head); printf("%d %d\n",num1,num2); display(head1); display(head2); return 0; }