题目
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例
7
要是对创建链表不熟悉的可以参考这篇文章:最常用的创建链表的方法
代码
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode
{
int data;//结点的数据域
struct LNode* next; //结点的指针域
}LNode, * List;//List为指向结构体LNode的指针类型
//创建链表
int main()
{
List L;
L = (LNode*)malloc(sizeof(LNode));//为头结点动态分配内存空间
L->next = NULL;
LNode* p = L;
int data, k, len = 0;
scanf("%d", &k);
while (scanf("%d", &data) != -1) {
if (data < 0)
break;
LNode* temp = (LNode*)malloc(sizeof(LNode));
temp->next = NULL;
temp->data = data;
p->next = temp;
p = p->next;
len++;
}
len = len - k + 1;//倒数第K个位置,顺数len-k+1个位置
if (len < 1)
printf("NULL");//这个位置不存在
else {
p = L;
while (len > 0) {
p = p->next;
len--;
}
printf("%d", p->data);
}
}