-
题目描述:
-
输入一个链表,输出该链表中倒数第k个结点。
(hint: 请务必使用链表。)
-
输入:
-
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。
输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。
-
输出:
-
对应每个测试案例,
若有结果,输出相应的查找结果。否则,输出NULL。
-
样例输入:
-
5 2 1 2 3 4 5 1 0 5
-
样例输出:
-
4 NULL
分析:
倒数第k个,就是正数第n-k+1个
AC代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
int data;
struct node *next;
} linklist;
int main() {
int i, n, m, k;
linklist *head, *tail, *p;
while(scanf("%d %d", &n, &k) != EOF) {
head = (linklist *)malloc(sizeof(linklist));
tail = head;
head->next = NULL;
for(i = 0; i < n; i++) {
scanf("%d", &m);
p = (linklist *)malloc(sizeof(linklist));
p->data = m;
p->next = NULL;
tail->next = p;
tail = p;
}
if(k > n || k < 1) {
printf("NULL\n");
}
else {
p = head->next;
/*倒数第k个,就是正数第n-k+1个:*/
for(i = 0; i < n-k; i++) {
p = p->next;
}
printf("%d\n", p->data);
}
free(p);
free(head);
}
return 0;
}
/**************************************************************
Problem: 1517
User: wusuopuBUPT
Language: C
Result: Accepted
Time:100 ms
Memory:2496 kb
****************************************************************/