给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL
。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
1 #include2 3 typedef struct Node 4 { 5 int data; 6 struct Node * next; 7 }Node, * linkList; 8 9 10 void InitList(linkList *p)11 {12 (*p) = (linkList)malloc(sizeof(Node));13 (*p)->next = NULL;14 }15 16 void creat(linkList L)17 {18 Node *s;19 int num, flag = 1;20 while(flag)21 {22 scanf("%d", &num);23 if(num >= 0)24 {25 s = (linkList)malloc(sizeof(Node));26 s->data = num;27 s->next = L->next;28 L->next = s;29 }30 else31 {32 flag = 0;33 }34 }35 }36 37 void printNum(linkList L, int n)38 {39 Node *p = L->next;40 int i = 0;41 while(p != NULL && i < n - 1)42 {43 p = p->next;44 i++;45 }46 if(p != NULL)47 printf("%d\n", p->data);48 else49 printf("NULL\n");50 51 }52 53 int main()54 {55 Node *p;56 int n;57 scanf("%d", &n);58 InitList(&p);59 creat(p);60 printNum(p, n);61 return 0;62 }