9度_題目1516:奇数が偶数の前になるように配列順序を調整する
1542 ワード
//タイムアウト
タイトルの説明:整数の配列を入力して、1つの関数を実現してその配列の中の数字の順序を調整して、すべての奇数が配列の前半に位置するようにして、すべての偶数は配列の後半に位置して、そして奇数と奇数、偶数と偶数の間の相対的な位置が変わらないことを保証します.
入力:
各入力ファイルには、テストケースのセットが含まれています.
各テストケースについて、最初の行にnを入力し、その配列の数を表します.
次の行にはn個の整数を入力します.配列内のn個の数を表します.
出力:
各テストケースに対応し、
調整された配列を表すn個の行を入力します.数字と数字の間にはスペースがあり、最後の数字の後ろにはスペースがありません.
サンプル入力:
5
1 2 3 4 5
サンプル出力:
1 3 5 2 4
タイトルの説明:整数の配列を入力して、1つの関数を実現してその配列の中の数字の順序を調整して、すべての奇数が配列の前半に位置するようにして、すべての偶数は配列の後半に位置して、そして奇数と奇数、偶数と偶数の間の相対的な位置が変わらないことを保証します.
入力:
各入力ファイルには、テストケースのセットが含まれています.
各テストケースについて、最初の行にnを入力し、その配列の数を表します.
次の行にはn個の整数を入力します.配列内のn個の数を表します.
出力:
各テストケースに対応し、
調整された配列を表すn個の行を入力します.数字と数字の間にはスペースがあり、最後の数字の後ろにはスペースがありません.
サンプル入力:
5
1 2 3 4 5
サンプル出力:
1 3 5 2 4
#include<cstdio>
#include<cstdlib>
typedef struct LNode
{
struct LNode *next;
int data;
}*Linklist;
Linklist CreateList(Linklist L,int n)
{
Linklist p=(Linklist)malloc(sizeof(Linklist *)),q=NULL;
p->next=NULL;
L=p;
int num;
for(int i=0;i<n;i++)
{
q=(Linklist)malloc(sizeof(Linklist *));
scanf("%d",&num);
q->data=num;
q->next=NULL;
p->next=q;
p=q;
}
return L;
}
void PrintList(Linklist L)
{
Linklist p=L->next;
if(p)
{printf("%d",p->data);p=p->next;}
while(p)
{
printf(" %d",p->data);
p=p->next;
}
printf("
");
}
void ListSort(Linklist L)
{
Linklist p=L,q=L,flag=NULL,temp=NULL;
while(p->next)
p=p->next;
flag=p;
while(q!=flag)
{
if(q->next->data%2==0)
{
temp=q->next;
q->next=temp->next;
temp->next=NULL;
p->next=temp;
p=temp;
}else
q=q->next;
}
}
int main()
{
int num;
while(scanf("%d",&num)!=EOF)
{
Linklist list=NULL;
list=CreateList(list,num);
ListSort(list);
PrintList(list);
}
return 0;
}