求链式线性表的倒数第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;
}