给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
#include<stdio.h>
#include<malloc.h>
int m;
typedef struct serial
{
int data;
struct serial* next;
} serial;
typedef int state;
int check(serial* &L)
{
int i,j,k; //计数
serial *p,*q;
p=L->next;
j=0;
k=0;
while(p)
{
q=p;
if(k==m-1)
break;
p=p->next;
k++;
}
if(!p)
{
p=q;
k--;
}
if(k<m-1)
return -1;
q=L->next;
while(p->next)
{
q=q->next;
p=p->next;
}
return q->data;
}
state input(serial* &L)
{
scanf("%d",&m);
int n;
serial *q,*p;
p=L;
while(1)
{
scanf("%d",&n);
q=(serial*)malloc(sizeof(serial));
q->next=NULL;
if(n<0)
break;
q->data=n;
p->next=q;
p=q;
// printf("*%d\n",p->data);
}
return 0;
}
int main()
{
serial *L;
int k;
L=(serial*)malloc(sizeof(serial));
L->next=NULL;
input(L);
// printf("%d\n",L->next->data);
k=check(L);
if(k>0)
printf("%d\n",k);
else
printf("NULL\n");
}