请问为什么删除链表中一个值的函数不能正确输出?

#include<stdio.h>
#include<stdlib.h>
typedef struct list{
	int *data;
	int length,maxsize;
}list;
chushihua(list &l){
	l.data=(int*)malloc(sizeof(int*)*20);
	l.maxsize=20;
	l.length=0;
}
void print(list l){
	int i=0;
	while(i<l.length){
		printf("第[%d]个值是%d\n",i+1,l.data[i]);
		i=i+1;
	}
}
void timu(list &l,int x){
	int k=0;//删除链表中等于x的值 
	for(int i=0;i<l.length;i++){
		if(l.data[i]!=x){
			l.data[k]=l.data[i];
			k++;
		}
		l.length=k;
	}
	printf("%d",l.length);	
} 
void chuangjian(list &l){
	int i=0;
	for(i=0;i<l.maxsize;i++){
		l.data[i]=i;
		l.length++;
	}
}
int main(){
	list l;
	chushihua(l);
	chuangjian(l);
	print(l);
	timu(l,5);
	printf("-----------------------------------\n"); 
	print(l);	
	return 0;
}

 

这样不对,不能一边赋值,一边用它判断大小,要有一个中间值例如:

void timu(list &l,int x){

    int k=0;//删除链表中等于x的值
    int len = 0;
    for(int i=0;i<l.length;i++){

        if(l.data[i]!=x){

            l.data[k]=l.data[i];

            k++;

        }

        len=k;

    }
    l.length = len;
    printf("%d\n",l.length);    

}

void timu(list &l,int x){
	int k=0;//删除链表中等于x的值 
	for(int i=0;i<l.length;i++){
		if(l.data[i]!=x){
			l.data[k]=l.data[i];
			k++;
		}
	}
        l.length=k;    //在for循环完全执行完后对链表长度进行修改    
	printf("%d",l.length);	
}

 

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^