给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式说明:
输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式说明:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息“NULL”。
样例输入与输出:
序号 | 输入 | 输出 |
1 | 4 1 2 3 4 5 6 7 8 9 0 -1 | 7 |
2 | 6 3 6 7 8 2 -2 | NULL |
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct node)
struct node
{
int num;
struct node *next;
};
struct node *creat()
{
int i=0;
struct node *p1,*p2,*head;
p1=head=NULL;
while(1)
{
i++;
p1=(struct node*)malloc(LEN);
scanf("%d",&p1->num);
if(p1->num<0)
break;
if(i==1)
head=p1;
else
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return head;
}
int length(struct node *p)
{
struct node *p1=p;
int i=0;
while(p1)
{
p1=p1->next;
i++;
}
return i;
}
int find(struct node *p,int k)
{
struct node *p1=p;
int i=1;
while(p1!=NULL && i<k)
{
p1=p1->next;
i++;
}
if(i==k)
return p1->num;
}
int main()
{
int l,k,s;
struct node *p,*head;
scanf("%d",&k);
p=creat();
l=length(p);
if(k>l)
printf("NULL\n");
else if(k<1)
printf("NULL\n");
else
{
s=find(p,l-k+1);
printf("%d\n",s);
}
return 0;
}