新手小白问一下为什么我的链表打印不出来

#include
#include
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define Status int
#define ElemType int
#define OK 1
#define INFEASIBLE -1
typedef struct LNode{
ElemType data;
struct LNode*next;
}LNode,*LinkList;
Status Create(LNode*phead,int length);
Status Put(LNode*phead);
void main()
{
LNode*head;
Create(head,3);
Put(head);
}
Status Create(LNode*phead,int length)
{
LNode*pnew;
phead=NULL;
for(int i=0;i {
pnew=(LNode*)malloc(sizeof(LNode));
scanf("%d",&pnew->data);
if(phead==NULL)
{
phead=pnew;
pnew=pnew->next;
}
else
pnew=pnew->next;

}
pnew=NULL;
return OK;

}
Status Put(LNode*&phead)
{
LNode*pcur;
for(pcur=phead;pcur!=NULL;pcur=pcur->next)
printf("%d",pcur->data);
return OK;
}

大致看来一下,应该是 Create(LNode*phead,int length)函数的问题,你这里参数LNode*phead;之后你运行了一句phead=NULL肯定不行的。

当phead不为null时,phead->next 是个随机值,你的phead与pnow节点的就没有联系了。pnew此后你也找不到了,内存泄漏了。
看你来了一句using namespace std; 这是c++啊。。。

list * Phead = NULL;
list * mark = NULL;
list * Pnow = NULL;
for(int i = 0;i < length;i++)
{
if((Pnow = (list *)malloc(sizeof(list))) == NULL)
{
printf("error malloc !\n");
return ERROR; // 假设这里之前已经申请了几个节点,需要去释放,这里释放代码我就不写了。。。
//释放之前申请的内存
}
scanf("%d",Pnow->data);
Pnow->next == NULL;
if(Phead == NULL)
{
Phead = Pnow;
mark = Phead;
}
else
{
mark->next = Pnow;
mark = mark->next;
}
Pnow = NULL;
}