关于#C语言#插入#删除#的问题,如何解决?

有一个测试点运行超时,希望能在没有大改动的前提下帮我修改一下代码。

题目如下:
单链表基本操作
请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列,输出实施上述操作后的链表。单链表数据域值为整数。

输入格式:
输入第1行为1个正整数n,表示当前单链表长度;第2行为n个空格间隔的整数,为该链表n个元素的数据域值。第3行为1个正整数m,表示对该链表施加的操作数量;接下来m行,每行表示一个操作,为2个或3个整数,格式为0 k d或1 k。0 k d表示在链表第k个结点后插入一个数据域值为d的结点,若k=0则表示表头插入。1 k表示删除链表中第k个结点,此时k不能为0。注:操作序列中若含有不合法的操作(如在长度为5的链表中删除第8个结点、删除第0个结点等),则忽略该操作。n和m不超过100000。

输出格式:
输出为一行整数,表示实施上述m个操作后的链表,每个整数后一个空格。输入数据保证结果链表不空。

输入样例:
5
1 2 3 4 5
5
0 2 8
0 9 6
0 0 7
1 0
1 6
输出样例:
7 1 2 8 3 5
代码长度限制
16 KB
Python (python3)
时间限制
1000 ms
内存限制
256 MB
Java (javac)
时间限制
5000 ms
内存限制
256 MB
其他编译器
时间限制
100 ms
内存限制
10 MB

#include <stdio.h>
#define N 100000
int a[N]={0};
void cha(int n,int k,int d){
    int i,t=a[k];
    a[k]=d;
for(i=n;i>k;i--){
   a[i]=a[i-1];
}
    a[k+1]=t;
};
void san(int n,int k){
    int i=0;    
for(i=k-1;i<n-1;i++){
    a[i]=a[i+1];
}    
};
int main(){
   int n,m,b,k,d; 
   scanf("%d",&n);
   int i;
for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    scanf("%d",&m);
for(i=0;i<m;i++){
    scanf("%d %d",&b,&k);
if(b==0){
    scanf("%d",&d);
if(k>n)
    continue;
    cha(n,k,d);
    n++;
}
else{
if(k==0||k>n)
    continue;
    san(n,k);
    n--;
}
}    
for(i=0;i<n;i++){
    printf("%d ",a[i]);
}
    return 0;
}

题目告诉你要用链表,你非要用数组,能不超时吗
数组挪一次多慢呀
你为什么不选python3,python3有list可以用,直接支持insert,del,不用挪来挪去的,也不用你自己定义链表