PTA数据结构之求链式线性表的倒数第K项

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


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


输入格式:


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


输出格式:


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


输入样例:


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


输出样例:


7


代码实现:


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2

typedef int ElemType;
typedef int Status;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
    struct LNode *piror;
}LNode,*LinkList;
//双链表
Status LinkList_Insert_L(LinkList &L)
{
    LNode *p,*rearPtr;
    L=(LNode *)malloc(sizeof(LNode));
    if(!L) exit(OVERFLOW);
    L->next=NULL;
    rearPtr=L;
    while(1)
    {
         p=(LNode *)malloc(sizeof(LNode));
        if(!p) exit(OVERFLOW);
        scanf("%d",&p->data);
         //printf("_%d_",p->data);
        if(p->data<0)
            break;
        rearPtr->next=p;
        rearPtr=p;

    }

    rearPtr->next=NULL;

}
Status LinkList_Locate_L(LinkList &L,int n)
{
    LNode *p=L,*q=L->next;
    int i=0;
    int j=1;
    if(p->next==NULL||n<=0)
    {
        printf("NULL");
         return ERROR;
    }

    while(p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    if(n>i)
        {
        printf("NULL");
         return ERROR;
    }
     while(q)
    {

        if(j==i-n+1)
        {
            printf("%d",q->data);
            break;
        }
        j++;

        q=q->next;
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    LinkList L;
    LinkList_Insert_L(L);//插入
    LinkList_Locate_L(L,n);
    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值