解题思路:都是链表的基本操作 思路就不多赘述了,主要是时间超限问题。输入输出最好都是用scanf、printf,而不是cin,cout;可能还有人会有疑问说我输入数值时没使用cin/cout啊,包括我!但是我当时输入字符串时由于迷恋C++ string 的字符串比较,使用了cin输入字符串,更改其输入方式及字符串比较判断即可

注意事项:

参考代码:#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

int main()
{

   int n;
   scanf("%d",&n);
   list<int> l;
   vector<int> v(n+1);
   for(int i = 0;i<n;i++)
   {
       scanf("%d",&v[i]);
       l.push_front(v[i]); //前插法与实际顺序相反
   }
   int m;
   scanf("%d",&m);
   getchar();
   char s[80];
   string s1 = "insert";
   string s2 = "delete";
   string s3 = "get";
   string s4 = "show";
   while(m--)
   {
       scanf("%s",s);
       if(strcmp(s,s2.c_str()) == 0)
       {
           int num;
           scanf("%d",&num);
           auto it = l.begin();
           advance(it,num-1);
           if(it != l.end())
           {
               l.erase(it);
               printf("delete OK\n");
               continue;
           }
           else{
               printf("delete fail\n");
               continue;
           }
       }
       else if(strcmp(s,s3.c_str()) == 0)
       {
           int num;
           scanf("%d",&num);
           auto it = l.begin();
           advance(it,num-1);
           if(it != l.end())
           {
               printf("%d\n",*it);
           }
           else{
               printf("get fail\n");
           }
           continue;
       }
       else if(strcmp(s,s1.c_str()) == 0)
       {
           int num,place;
           scanf("%d%d",&place,&num);
           auto it = l.begin();
           advance(it,place-1);
           if((l.empty() && place == 1) || (place > 0 && place <= l.size()) )
           {
               l.insert(it,num);
               printf("insert OK\n");
               continue;
           }
           else
           {
               printf("insert fail\n");
               continue;
           }
       }
       else if(strcmp(s,s4.c_str()) == 0)
       {
           if(!l.empty())
           {
               for(auto it = l.begin();it != l.end();it++)
               {
                  printf("%d ",*it);
               }
               printf("\n");
               continue;
           }
           else{
               printf("Link list is empty\n");
               continue;
           }

       }
   }
   return 0;
}

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论