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

输入格式:

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

输出格式:

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

输入样例:

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

结尾无空行

输出样例:

7

结尾无空行

代码:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node *PtrToNode;
struct Node {
    int data; /* 存储结点数据 */
    PtrToNode   next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */

int main()
{
    List L = NULL;
    PtrToNode p;
    int x,y = 0,k,i;//y是数据个数
    scanf("%d",&k);
    scanf("%d",&x);
    while(x>=0)//录入数据,当小于0时停止录入
    {
        p = (PtrToNode)malloc(sizeof(PtrToNode));
        p->data = x;
        scanf("%d",&x);
        p->next = L;
        L = p;
        y++;

    }
    p = L;
    if(y>=k)
    {
        for(i = 1;i<=k-1;i++)//注意是头插法,与输入顺序相反
        {
            p = p->next;
        }
        printf("%d",p->data);
    }
    else printf("NULL");
    return 0;

}
 


版权声明:本文为qq_55362327原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。