问题描述
输入一个整数组成的序列,然后将序列中的奇数位置结点依序放在前面,偶数位置结点依序放在后面,组成一个新的序列。输出此新序列。
问题输入
输入共两行,第一行是一个正整数n,表示序列长度,n<100。第二行是n个整数,中间用空格隔开,表示序列中的元素。
问题输出
在一行上输出新生成的序列,数字中间用空格隔开。
输入样例
7
10 2 30 4 50 60 7
输出样例
10 30 50 7 2 4 60
解题思路
用了投机取巧的方式,先输出了偶数位置(题目和输出对不上,估计是题目错了)上的元素,再输出了奇数位置的元素,并没有组成新的序列
如果改的话,就在printf那把那个节点整到另外一个链表中,最后两个链表首尾相接就完事了
#include<stdio.h>
#include<stdlib.h>
typedef struct list{
int data;
struct list *next;
}node, *List;
void Create(List *p, int n){
List tail,q;
int i;
*p = tail = (List)malloc(sizeof(node));
(*p)->next = NULL;
for(i=0; i<n; i++){
q = (List)malloc(sizeof(node));
scanf("%d", &q->data);
q->next = NULL;
tail->next = q;
tail = q;
}
q->next = NULL;
}
void GetOdd(List p, int n){
List q;
int i;
q = p->next;
for(i=0; i<n, q!=NULL; i++){
if( i%2==0 ){
printf("%d ", q->data);
}
q = q->next;
}
}
void GetEven(List p, int n){
List q;
int i;
q = p->next;
for(i=0; i<n, q!=NULL; i++){
if( i%2!=0 ){
printf("%d ", q->data);
}
q = q->next;
}
}
int main(){
List p;
int n;
scanf("%d", &n);
Create(&p, n);
GetOdd(p, n);
GetEven(p, n);
return 0;
}