7-3 求链式线性表的倒数第K项 (20分)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
输入格式:
输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。
输出格式:
输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。
输入样例:
4 1 2 3 4 5 6 7 8 9 0 -1
输出样例:
7
作者
DS课程组
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
Accepted Code
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct LNode {
int data;
LNode* next;
LNode* prior;
} *Linklist, LNode;
void Print(Linklist L, int k, int len);
Linklist CreatLink();
int len = 0;
int main() {
Linklist L;
int k = 0;
scanf("%d", &k);
L = CreatLink();
Print(L, k, len);
return 0;
}
void Print(Linklist L, int k, int len) {
if (k > len || k == 0) {
printf("NULL\n");
return;
}
for (int i = 1; i < k; i++) {
L = L->prior;
}
printf("%d\n", L->data);
}
Linklist CreatLink() {
Linklist p ,L;
L = (Linklist) malloc(sizeof(LNode));
L->prior = NULL;
L->next = NULL;
p = L;
int num;
while (scanf("%d", &num)) {
if (num < 0) {
break;
}
LNode *New = (LNode *) malloc(sizeof(LNode));
New->data = num;
New->prior = p;
New->next = NULL;
p->next = New;
p = New;
++len;
}
//p->next = NULL;
return p;
}
仅供参考,请勿抄袭