/*
题目:输入一个单向链表,输出该链表中倒数第 k 个结点。链表的倒数第 0 个结点为链表
的尾指针。
链表结点定义如下:
struct node
{
int data;
struct node *next;
};
typedef struct node* PtrToNode;
typedef PtrToNode Position;
typedef Position List;
*/
#include <iostream>
#include <assert.h>
#include "./List.h"
using namespace std;
void print_list(List list)
{
assert(list != NULL);
list = First(list);
while(list != NULL)
{
cout<<list->data<<" ";
list = list->next;
}
cout<<endl;
}
Position get_last_kth(List list, int k)
{
assert(list != NULL);
Position tmp = First(list);
while(tmp != NULL && --k >= )
tmp = tmp->next;
if(NULL == tmp)//the length of list <= k
return NULL;
Position ret = First(list);
while(tmp != NULL)
{
ret = ret->next;
tmp = tmp->next;
}
return ret;
}
int main(int argc, char const *argv[])
{
List list = CreateEmptyList();
int k;
for(int i = ; i != ; ++i)
PushBack(i, list);
print_list(list);
while(cin>>k)
{
Position tmp = get_last_kth(list, k);
cout<<"k:"<<k<<" = ";
if(tmp == NULL)
cout<<"NULL";
else
cout<<tmp->data;
cout<<endl;
}
return ;
}