大神们,帮小弟调试一下这个链表,小弟我快疯了,是遍历那的有关问题HELP!(新人)

大神们,帮小弟调试一下这个链表,我快疯了,是遍历那的问题HELP!(新人)
# include <stdio.h>
# include <malloc.h>
struct list
{
int sore;//序号
int data;//数据
list * pvod;//下一个变量指针

};
list* create(void)
{
list* head=NULL;
list* late=NULL;
head=(list*)malloc(sizeof(list));
late=head;
if(head==NULL)
{
printf("内存节点申请失败!");
return NULL;
}
list* Element;
int sor,dat;
printf("请输入初始长度:");
int i;
scanf("%d",&i);
for(int j=0;j<i;j++)
{
printf("请输入序号和成绩:");
scanf("%d %d",&sor,&dat);
Element=(list*)malloc(sizeof(list));
if(Element==NULL)
{
printf("内存节点申请失败!");
return NULL;
}
Element->data =dat;
Element->sore =sor;
head->pvod =Element;
head=Element;
}
Element=late;
late=head;
head=Element->pvod;
return head;
}
void  traverse(list*head)
{
printf("-------------");
do
{
printf("成绩是:%d序号是%d\n",head->data,head->sore);
head=head->pvod;
}
while(head->pvod !=NULL);
printf("------------");
}
int main(void)
{
list* head=create();
traverse(head);
return 0;
}
------解决思路----------------------
仅供参考
# include <stdio.h>
# include <malloc.h>

struct list
{
int sore;//序号
int data;//数据
list * pvod;//下一个变量指针

};

list* create(void)
{
list* head=NULL;
list* late=NULL;
head=(list*)malloc(sizeof(list));
late=head;
if(head==NULL)
{
printf("内存节点申请失败!");
return NULL;
}
list* Element;
int sor,dat;
printf("请输入初始长度:");
int i;
scanf("%d",&i);
for(int j=0;j<i;j++)
{
printf("请输入序号和成绩:");
scanf("%d %d",&sor,&dat);
Element=(list*)malloc(sizeof(list));
if(Element==NULL)
{
printf("内存节点申请失败!");
return NULL;
}
Element->data =dat;
Element->sore =sor;
head->pvod =Element;
head=Element;
}
Element->pvod = NULL; //防止后面的指针乱指,赋值为NULL,确保最后为NULL 
// Element=late;
// late=head;
// head=Element->pvod;
return late;
}
void  traverse(list*head)
{
printf("-------------\n");
head = head->pvod;//表头没赋值,跳过 
while(head != NULL)
{
printf("成绩是:%d序号是%d\n",head->data,head->sore);
head=head->pvod;
}

printf("------------\n");
}

int main(void)
{
list* head=create();
traverse(head);
return 0;
}