9度_題目1516:奇数が偶数の前になるように配列順序を調整する

1542 ワード

//タイムアウト
タイトルの説明:整数の配列を入力して、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; }