问题:
输入:
数据只有一组,第一行有n+1个整数,第一个整数是这行余下的整数数目n,后面是n个整数。这一行整数是用来初始化列表的,并且输入的顺序与列表中的顺序相反,也就是说如果列表中是1、2、3那么输入的顺序是3、2、1。第二行有一个整数m,代表下面还有m行。每行有一个字符串,字符串是“get”,“insert”,“delete”,“show”中的一种。如果是“get”或者“delete”,则其后跟着一个整数a,代表获得或者删除第a个元素;如果是“insert”,则其后跟着两个整数a和e,代表在第a个位置前面插入e;“show”之后没有整数。
输出:
如果获取成功,则输出该元素;如果删除成功则输出“delete OK”;如果获取失败或者删除失败,则输出“get fail”以及“delete fail”。如果插入成功则输出“insert OK”,否则输出“insert fail”。如果是“show”则输出列表中的所有元素,如果列表是空的,则输出“Link list is empty”。注:所有的双引号均不输出
代码:
#include <iostream>
#include <string>
typedef struct Node{
int data;
struct Node *next;
};
using namespace std;
int create_list(Node *&L,int n){
//倒序输入
Node *p=L,*s;
p->next=NULL;//头结点
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=n-1;i>=0;i--){
s=new Node;
s->data=a[i];
p->next=s;
p=s;
p->next=NULL;
}
}
int insert_list(Node *&L,int i ,int e){
//在i位置插入e
Node *p=L,*s;
int j=0;
while(p&&j<i-1){ //i从1开始,有头结点,找i结点前的一个节点,判断i这个节点是否存在,这里和删除某个节点不一样,删除是看i的后一个节点是否存在
p=p->next;
j++;
}
if(!p||j>i-1){
cout<<"insert fail"<<endl;
return 0;
}
s=new Node;
s->data=e;
s->next=p->next;
p->next=s;
cout<<"insert OK"<<endl;
}
int print(Node *&L){
Node *p=L->next;
if(p==NULL){
cout<<"Link list is empty"<<endl;
return 0;
}
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int get_item(Node *&L,int i){
//得到第i个元素
Node *p=L->next;
int j=1;
while(p&&j<i){ //i从1开始,有头结点,找到第i个节点
p=p->next;
j++;
}
if(!p||j>i){
cout<<"get fail"<<endl;
return 0;
}
cout<<p->data<<endl;
}
int delete_item(Node *&L,int i){
//删除第i个元素
Node *p=L;
int j=0;
while((p->next)&&j<i-1){ //找到i的前驱,因为删除的是i后面的元素,所以判断的是p->next
p=p->next;
j++;
}
if(!(p->next) || j>i-1){
cout<<"delete fail"<<endl;
return 0;
}
Node *q=p->next;
p->next=q->next;
delete q;
cout<<"delete OK"<<endl;
}
int main()
{
//get”,“insert”,“delete”,“show”
Node *p=new Node;
int n;
cin>>n;
create_list(p,n);
int m,i=0;
cin>>m;
string s;
while(1){
if(i==m){
break;
}
cin>>s;
if(s=="get"){
i++;
int k;
cin>>k;
get_item(p,k);
}else if(s=="insert"){
i++;
int k,e;
cin>>k>>e;
insert_list(p,k,e);
}else if(s=="delete"){
i++;
int k;
cin>>k;
delete_item(p,k);
}else if(s=="show"){
i++;
print(p);
}
}
return 0;
}
结果: