请问一下这代码要怎么改?急(数据结构)

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
int data;//数据域
struct Node *pNext;//指针域
}NODE; *PNODE; // PNODE=struct Node *

PNODE create_list(void);
void traverse_list(PNODE pHead);

int main()
{
PNODE pHead = NULL;
pHead = create_list();//creat_list的功能:创建一个非循环单链表,并将该链表的头结点的地址付给pHead
traverse_list(pHead);//遍历;
return 0;
}

PNODE create_list(void)
{
int len;//用来存放有效结点的个数;
int i;
int val;//用来临时存放用户输入的结点的值;

//分配了一个不存放有效数据的头结点; 
PNODE pHead = (PNODE)malloc(sizeof(NODE));    //动态为pHeat分配内存; 
if(NULL == pHead)
{
    printf("分配失败,程序终止!\n");
    exit(-1);
 } 
PNODE pTail = pHead;
pTail->pNext = NULL;

printf("请输入你需要生成的链表结点的个数:len = ");
scanf("%d", &len);

for(i=0; i<len; i++)
{
    printf("请输入第%d个结点的值:", i+1);
    scanf("%d", &val);
    
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    if (NULL == pNew)
    {
        printf("分配失败,程序终止!");
        exit(-1);
    }
    pNew->data = val;
    pTail->pNext = pNew;
    pNew->pNext = NULL;
    pTail = pNew;
    }
 

}

void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;

 whlie(NULL != P)
 {
     printf("%d  ", p->data);
     p = p->pNext;
 }

}