这个程序显示有错误,该怎么改呢?

#include
#define MAXSIZE 20
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last;
};
List ReadInput();
void PrintList( List L );
List Delete( List L, ElementType minD, ElementType maxD );
int main()
{
List L;
ElementType minD, maxD;
int i;

L = ReadInput();
scanf("%d %d", &minD, &maxD);
L = Delete( L, minD, maxD );
PrintList( L );

return 0;

}
List Delete( List L, ElementType minD, ElementType maxD )
{
int i,j;
for(i=0;iLast+1;i++)
{
if(L->Data[i]>minD&&L->Data[i] {
for(j=i;jLast;j++)
{
L->Data[j]=L->Data[j+1];
}
L->Last--;
i--;
}
}
return L;
}图片说明

图片说明

算法不够优化,不要用两个循环。其实一个循环就可以了。
用一个变量记录当前读取的下标,另一个记录当前有效数字的最大下标,
遇到需要删除的跳过,否则每次将前者拷贝到后者。

List Delete(List L, int min, int max)
{
int j = 0;
for (int i = 0; i < L->Last+1; i++)
{
if (L->Data[i] <= min || L->Data[i]>=max) continue;
L->Data[j++]=L->Data[i];
}
L->Last=j-1;
return L;
}