给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL
。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
#include<stdlib.h>
#include<iostream>
#define ERROR -1
#define OK 1
typedef int ElemType;
typedef int Status;
using namespace std;
typedef struct LNode{
ElemType data;
struct LNode *before;
struct LNode *next;
}LNode,*LinkList;
//初始化
Status InitList(LinkList &L){
L=new LNode;
L->next=NULL;
L->before=NULL;
return OK;
}
// 增,插法尾
LNode *InsertList(LinkList &L,ElemType e,LNode *p){
LNode *r;
r=p;
LNode *s=new LNode;
s->data=e;
s->next=NULL;
s->before=r;
r->next=s;
r=s;
return r;
}
// 查
Status GetElem(LinkList L,LNode * r,int i){
if(i<0) {
cout<<"NULL";
return ERROR;
}
int j=1;
LNode *p;
p=r;
while(j<i&&p){
p=p->before;
j++;
}
if(p==L){
cout<<"NULL";
return ERROR;
}
cout<<p->data;
return OK;
}
main(){
LinkList L;
LNode *p;
int a,b,i;
a=InitList(L);
LNode *r;
if(a==1){
cin>>i;
cin>>b;
p=L;
while(b>=0){
r=InsertList(L,b,p);
p=r;
cin>>b;
}
GetElem(L,r,i);
}
}