给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL
。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
解题思路:寻找倒数第K项,这里所用的方法是定义两个指针,让第一个指针先走k步,然后两个指针一起移动,第一个指针移到末尾的时候,第二个指针就到了倒数第K个位置,输出第二个指针的值即可。
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 typedef struct LNode{ 5 int data; 6 struct LNode *next; 7 }LNode,*LinkList; 8 9 int main() 10 { 11 int temp; 12 int k,cnt=0; 13 LinkList L; 14 L = (LinkList)malloc( sizeof ( struct LNode)); 15 LNode *s=L,*r=L,*p; 16 17 scanf("%d",&k); 18 int f=k; //保护k的值 19 while(1){ 20 scanf("%d",&temp); 21 if( temp<0 ){ 22 break; 23 } 24 else{ 25 p=(LNode *)malloc(sizeof(LNode)); 26 p->data = temp; 27 r->next = p; 28 r = p; 29 k--; 30 cnt++; 31 if( k<1){ 32 s= s->next; 33 } 34 } 35 } 36 if( f>cnt){ 37 printf("NULL"); 38 } 39 else printf("%d",s->data); 40 41 return 0; 42 }