无表头的单链表打印不出结果

#include
#include
struct node
{
int data;
struct node* next;
};
void printlist(struct node* phead)//打印
{
struct node* pmove=phead;
while(pmove!=NULL)
{
printf("%d",pmove->data);
pmove=pmove->next;
}
}
void insertbytail(struct node** phead,int x)//尾插
{
struct node* newnode=(struct node*)malloc(sizeof(struct node));
newnode->data=x;
newnode->next=NULL;
struct node* tail=*phead;//定义一个指针tail指向第一个结点
if(*phead==NULL)
{
phead=newnode;
}
else
{
while(tail!=NULL)
{
tail=tail->next;
}
tail->next=newnode;
}
}
void structtest()
{
struct node
plist=NULL;
insertbytail(&plist,1);
insertbytail(&plist,2);
printlist(plist);
}
int main()
{ void structtest();
structtest();
system("pause");
return 0;
}
c上无表头的单链表
代码可以运行,但是没有结果。
能不能指出问题并在我的代码基础上改正。

insertbytail()函数中,while(tail!=NULL) 这里改成 while(tail->next!=NULL)
运行结果如下:

img

完整代码如下:

#include<stdio.h>
#include<stdlib.h>
struct node
{
    int data;
    struct node* next;
};
void printlist(struct node* phead)//打印
{
    struct node* pmove=phead;
    while(pmove!=NULL)
    {
        printf("%d",pmove->data);
        pmove=pmove->next;
    }
}
void insertbytail(struct node** phead,int x)//尾插
{
    struct node* newnode=(struct node*)malloc(sizeof(struct node));
    newnode->data=x;
    newnode->next=NULL;
    struct node* tail=*phead;//定义一个指针tail指向第一个结点
    if(*phead==NULL)
    {
        *phead=newnode;
    }
    else
    {
        while(tail->next!=NULL)
        {
            tail=tail->next;
        }
        tail->next=newnode;
    }
}
void structtest()
{
    struct node* plist=NULL;
    insertbytail(&plist,1);
    insertbytail(&plist,2);
    printlist(plist);
}
int main()
{ 
    void structtest();
    structtest();
    system("pause");
    return 0;
}