求链式线性表的倒数第K项

来源:互联网 发布:聚拓数据录入邀请码 编辑:程序博客网 时间:2024/06/06 03:00

给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。

输入格式:

输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。

输出格式:

输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL

输入样例:

4 1 2 3 4 5 6 7 8 9 0 -1

输出样例:

7
#include <stdio.h>typedef struct List{    int data;    struct List *next;    struct List *pre;}List;int main(){    int k, value, i, num = 0;    List *L, *prePtr, *rearPtr, *curPtr;    prePtr = rearPtr = L = (List *)malloc(sizeof(List));    L->pre = NULL;    scanf("%d", &k);    while(scanf("%d", &value) && value >= 0)    {        curPtr = (List *)malloc(sizeof(List));        curPtr->data = value;        curPtr->pre = rearPtr;        rearPtr->next = curPtr;        rearPtr = curPtr;        ++num;    }    rearPtr->next = NULL;    if(k > num || k <= 0)    {         printf("NULL");         return 0;    }    else if(k > num / 2)    {        curPtr = L->next;        k = num - k;        for(i = 0; i < k; ++i)        {            curPtr = curPtr->next;        }        printf("%d", curPtr->data);    }    else    {        for(i = 1; i < k; ++i)        {            rearPtr = rearPtr->pre;        }        printf("%d", rearPtr->data);    }}