链表中倒数第k个节点(九度OJ 1517)

来源:互联网 发布:手提包淘宝店名称 编辑:程序博客网 时间:2024/05/16 11:02

题目描述:

输入一个链表,输出该链表中倒数第k个结点。
(hint: 请务必使用链表。)

输入:

输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的个数,k代表要查询倒数第几个的元素。
输入的第二行包括n个数t(1<=t<=1000000):代表链表中的元素。

输出:

对应每个测试案例,
若有结果,输出相应的查找结果。否则,输出NULL。

样例输入:
5 21 2 3 4 51 05
样例输出:
4NULL

源代码:

#include <stdio.h>#include <malloc.h>typedef int Elemtype;typedef struct Lnode{    int data;    Lnode *next;} LinkList;void CreateList(LinkList *&l,Elemtype a[],int n){    int i;    LinkList *s,*r;    l=(LinkList *)malloc(sizeof(LinkList));    r=l;    for(i=0;i<n;i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];        r->next=s;        r=s;    }    r->next=NULL;}void SearchAndDispList(LinkList *l,int n,int k){    LinkList *p=l->next;    int num=1;    int flag=n-k+1;    if(!(k>=1 && k<=n))        printf("NULL\n");    else    {        while(num<flag && p!=NULL)        {            num++;            p=p->next;        }        printf("%d\n",p->data);    }}int main(){    int n,k;    int i;    LinkList *l;    Elemtype a[1000];    while(scanf("%d %d",&n,&k)!=EOF)    {        for(i=0;i<n;i++)            scanf("%d",&a[i]);        CreateList(l,a,n);        SearchAndDispList(l,n,k);    }    return 0;}

程序截图:



0 0