题目来源:http://ac.jobdu.com/problem.php?pid=1517
-
题目描述:
-
输入一个链表,输出该链表中倒数第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
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct Node
{
int iData;
Node* pNext;
Node()
{
iData = 0;
pNext = NULL;
}
};
Node* pHead;
void Delete_List()
{
Node* tmp = pHead;
Node* p1 = NULL;
while(tmp)
{
p1 = tmp->pNext;
delete tmp;
tmp = p1;
}
}
int main()
{
int n, k, i;
while(~scanf("%d %d", &n, &k))
{
pHead = new Node();
scanf("%d", &pHead->iData);
Node* p = pHead;
Node* pNode = NULL;
for(i = 1; i < n; ++i)
{
pNode = new Node();
scanf("%d", &pNode->iData);
p->pNext = pNode;
p = pNode;
}
if(k > n || k == 0)
printf("NULL\n");
else
{
p = pHead;
k = n-k;
while(k--)
p = p->pNext;
printf("%d\n", p->iData);
}
Delete_List();
}
return 0;
}