#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
#define error 0
#define ok 1
#define overflow -2
typedef int status;
typedef char elemtype;
typedef struct lnode{
elemtype data;//数据域
struct lnode *next;//指针域
}lnode, *linklist;
//初始化链表
status initlist(linklist & l) {
lnode * temp;
temp = (lnode* )malloc(sizeof(lnode));
if(!temp) exit(overflow);
l = temp;
l->next =NULL;
return ok;
}
//输入(尾部插入)链表
status inputlist(linklist & l) {
lnode * curPtr, * rearPtr;
int n;
cin>>n;
rearPtr = l; //初始时头结点为尾节点,rearPtr指向尾巴节点
for (int i = 1;i <= n;i ++){ //每次循环都开辟一个新节点,并把新节点拼到尾节点后
curPtr = (lnode*)malloc(sizeof(lnode));//生成新结点
if(!curPtr) exit(overflow);
scanf(" %c",&curPtr->data);//输入元素值
curPtr->next = NULL; //最后一个节点的next赋空
rearPtr->next = curPtr;
rearPtr = curPtr;
}
return ok;
}
status getelem(linklist l,int i,elemtype &e){
int j=1;
linklist p;
p = l->next;
while(p&&j<i){
p=p->next;++j;
}
if(!p||j>i) return error;
e=p->data;
return ok;
}
//销毁链表
void destroylist(linklist &l) {
linklist p = l;
while (p)
{
l = l->next;
delete(p);
p = l;
}
}
int main()
{
linklist l; int i;elemtype e;
initlist(l);
inputlist(l);
// printf("please input i:");
scanf("%d",&i);
if(getelem(l,i,e)) printf("%d\n",e);
else printf("error");
destroylist(l);
return 0;
}