您的位置:首页 > 理论基础 > 数据结构算法

数据结构-单链表节点的删除

2017-10-10 15:58 375 查看

数据结构-单链表节点的删除

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte

总提交:210            测试通过:106

描述

单链表节点的删除操作是线性表数据结构对象操作的重要内容,请您写一个程序完成对一个单链表某一个节点的删除操作。

请用如下函数完成上述功能,线性表List的定义如下(强烈建议使用下面的定义和函数结构)

typedef struct LNode

{

Elemtype data;

struct LNode *next;

}LNode,*LinkList;

int ListDelete_L(LinkList &L,int i,Elemtype &e)

输入

输入有多组测试数据,每组测试数据包括1行,用空格隔开的1个数字和多个字母,数字表示要删除节点在线性表中的位置,紧接着几个字母表示要删除节点线性表的名称,后面的字母表示线性表的当前的内容。

输出

如果删除失败,输出ERROR,否则输出OK,并输出删除节点后线性表的内容。

样例输入

7 L1 = (DEGIKNQTV)

4 L2 = (CFG)

样例输出

ListDelete_L(L1, 7, e) = OK, L1 = (DEGIKNTV),  e = 'Q'

ListDelete_L(L2, 4, e) = ERROR, L2 = (CFG)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef char  Elemtype;
char a[10];
char st;
typedef struct LNode
{
Elemtype data;
struct LNode *next;
} LNode,*LinkList;
void create(LinkList &l)
{
l=new LNode;
LinkList k=new LNode;
l->next=k->next=NULL;
char str;
int f=0;
while(cin>>str&&str!='(')
{

}
while(cin>>str&&str!=')')
{
LinkList p=new LNode;
p->data=str;
p->next=NULL;
k->next=p;
k=p;
if(f==0)
{
l->next=k;
f=1;
}
}
}
int ListDelete_L(LinkList &l,int i)
{
int j=1;
LinkList k;
LinkList p=new LNode;
p=l;
while(p&&j<i)
{
j++;
p=p->next;
}
if(!p->next||j<i)
{
return 0;
}
k=p->next;
st=k->data;
//cout<<(p->next)->data<<endl;
p->next=k->next;
return 1;
}
void input(LinkList l)
{
LinkList p=new LNode;
p=l->next;
while(p)
{
cout<<p->data;
p=p->next;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
char b[100];
LinkList la;
scanf("%s",b);
create(la);
int k=ListDelete_L(la,n);
if(k==0)
{
printf("ListDelete_L(%s, %d, e) = ERROR, %s = (",b,n,b);
input(la);
printf(")\n");
}
if(k==1)
{
printf("ListDelete_L(%s, %d, e) = OK, %s = (",b,n,b);
input(la);
printf("),  e = '%c'\n",st);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: