给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL
。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
#include<stdio.h>
#include<malloc.h>
typedef struct LNode* List;
struct LNode{
int Data;
List Next;
};
int main()
{
// 读取正整数K
int K, temp;
scanf("%d", &K);
// 开辟链表头节点
List L = (List) malloc(sizeof(List));
L->Next = NULL;
//当有整数输入 并且整数大于等于0时 执行循环
while(scanf("%d", &temp) && temp >= 0){
List p = (List) malloc(sizeof(List));
p->Data = temp;
//头插法倒叙插入元素
p->Next = L->Next;
L->Next = p;
}
int i = 0;
while(L){
if(i == K){
printf("%d\n", L->Data);
return 0;
}
++i;
L = L->Next;
}
printf("NULL\n");
return 0;
}
改了后面的判断,并且让参考代码可以正确提交