翁恺c语言进阶第四周

题目内容:

你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。

输入格式:

一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。

输出格式:

按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有空格。

输入样例:

1 2 3 4 -1

输出样例:

4 3 2 1

#include 
#include 

typedef struct _point {
	int value;
	struct _point *next;
} point; //定义一个point的结构 

int main () {
point* head = NULL;
int number;
int cnt=0;
int i;

do {
	scanf ("%d", &number );
	if (number != -1){
		point *p = (point *)malloc (sizeof (point));
		p->value = number;
		p->next = NULL;//输入不是-1,构建结构体变量 
		
		point *last = head;  //判断是否为第一个节点 
		if (last){                  //判断是否为第一个节点 
			while (last->next){     //将下一个节点与上一个节点连接 
				last = last->next;
			}                         //从第一个节点开始向后遍历每个节点,看next是否空,若空,执行下一步 	
			last->next = p;           //将新读入的数所在的指针,存入上一个空的节点上 ,制造出下一个节点的位置 
		} else head = p;
	}
	cnt++;
}
while (number != -1);
int a[cnt-1];
for (i = 0; i<cnt-1; i++){
	a[i]=head->value;
	head = head->next;
}
for (i = cnt-2; i>=0; i--){
	printf ("%d ", a[i]);
};
	return 0;
} 

每次构建节点,利用计数器记录,将最后的结果作为数组的长度;输出结果时,将每个节点的数值重新存入一个已知长度的数组,并遍历数组输出结果;
OJ测试结果:
翁恺c语言进阶第四周_第1张图片输入的数据按照顺序依次存入链表后,重新再逆序输出,所需要的时间过长,那么能否在输入过程中逆序存入数组;

 //head依旧初始化为NULL
 {
	scanf ("%d", &number );
	if (number != -1){
		point *p = (point *)malloc (sizeof (point));
		p->value = number;
		p->next = head;
		head = p;//将第一个结点的指针传给head,			
		         //在下一次循环中,head作为新节点next所储存的值
	}

}
while (number != -1);

通过对输入数据的存入方式进行修改,再对链表进行遍历输出,运行的结果能够满足500ms的要求。

你可能感兴趣的:(翁恺c语言进阶第四周)