请问为什么这段代码头插法之后输出的值不是我自己添加的值

//单链表的创建和头插尾插
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
	int data ;
	 struct Lnode *next;
}Lnode,*linklist;
void chushihua(linklist &l){
	l = (Lnode *)malloc(sizeof(Lnode));
	if(l==NULL){
		printf("defeat");
	}
	l->next=NULL;
}
void addhead(linklist &l ,int e){
	linklist p;
	p=(linklist)malloc(sizeof(Lnode));
	if(p==NULL){
	printf("shibai"); 
}
p->next=l->next;
p->data=e;
l->next=p;
    
}
void print(linklist l){
	while(l->next!=NULL){
		printf("值是%d\n",l->data);
		l->next=l->next->next;
	}
	printf("打印结束");
}
int main(){
	linklist l;
	chushihua(l);
	addhead(l,323);
	addhead(l,3321);
	print(l);
	return 0;
}

 

把print函数里的循环改成下面这样:

    while (l!= NULL) {
        printf("值是%d\n", l->data);
        l= l->next;
    }