给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL
。
样例">输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
结构体问题:
typedef struct LNode{
int data;
struct LNode *next;
}LinkList,*List;
typedef struct LNode LinkList;
typedef struct LNode* List;
struct LNode{
int data;
List next;
};
为什么是LNode* 而非*LNode
头插法错误写法:
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode LinkList;
typedef struct LNode* List;
struct LNode{
int data;
List next;
};
void main(){
int K,n;
scanf("%d",&K);
//头插法求第i位
List p,L,head;
//为L分配一个空间
L = (List)malloc(sizeof(LinkList));
head = (List)malloc(sizeof(LinkList));
//看是否分配好空间
if(!L || !head){
return 0;
}
//初始化L
L->data = 0;
L->next = NULL;
head->data = 0;
head->next = NULL;
//在L与head之间建立连接
L->next = head;
do{
//开辟一个p空间
p = (List)malloc(sizeof(LinkList));
if(!p){
return 0;
}
p->next = NULL;
scanf("%d",&n);
p->data = n;
p->next = head;
L->next = p;
head = p;
free(p);
}while(n != -1);
for(int i = 1; i < K; i++){
L->next= L;
}
printf("%d",L->data);
}