数据结构-单链表节点的获取
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:273 测试通过:164
总提交:273 测试通过:164
描述
单链表节点的获取操作是线性表数据结构对象操作的重要内容,请您写一个程序完成对一个单链表某一个节点的获取操作。
请用如下函数完成上述功能,线性表List的定义如下(强烈建议使用下面的定义和函数结构)
typedef struct LNode
{
Elemtype data;
struct LNode *next;
}LNode,*LinkList;
int GetElem_L(LinkList L,int i,Elemtype &e)
输入
输入有多组测试数据,每组测试数据包括1行,用空格隔开的1个数字和多个字母,数字表示要获取节点在单链表中的位置,后面的字母表示单链表的当前的内容。
输出
如果获取失败,输出ERROR,否则输出OK,并输出获取节点的内容。
样例输入
2 L2 = (HK)
14 L3 = (ADFIKLMORUVWX)
14 L3 = (ADFIKLMORUVWX)
样例输出
GetElem_L(L2, 2, e) = OK, e = 'K'
GetElem_L(L3, 14, e) = ERROR
GetElem_L(L3, 14, e) = ERROR
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char e;
typedef char Elemtype;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
} LNode,*LinkList;
void InitList_L(LinkList &L)
{
L=new LNode;
L->next=NULL;//头结点
char c;
while(cin>>c&&c!='(') {}
while(cin>>c&&c!=')')
{
LinkList p=new LNode;
p->data=c;
L->next=p;
L->data=p->data;
p->next=NULL;
}
}
int GetElem_L(LinkList L,int i)
{
int j=1;
LinkList p=new LNode;
p=L->next;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i)
return 0;
e=p->data;
return 1;
}
int main()
{
LNode *a;
char s[21];
int n;
while(scanf("%d",&n)!=EOF)
{
getchar();
scanf("%s",s);
InitList_L(a);
if(GetElem_L(a,n)==1)
{
printf("GetElem_L(%s, %d, e)",s,n);
printf(" = OK, e = '%c'",e);
}
else
{
printf("GetElem_L(%s, %d, e)",s,n);
printf(" = ERROR");
}
printf("\n");
}
return 0;
}