给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第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#include #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 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; }