链表的长度为0,那么头节点为NULL吗 ?

链表的长度为0,那么头节点为NULL吗 ?
在写链表的时候,遇到一个问题。
我让链表长度为0,然后在任意位置插入一个值
结果没有插入进去,说明头指针是NULL
在插入函数中有这样的代码来判断是否能插入。
之前创建链表,默认头节点的指针域为NULL,但数据域没管
所以链表长度为0,头节点到底是不是NULL?(求靓仔美女们给我一颗定心丸,蟹蟹)

bool insert_list(PNODE pHead, int pos, int val)
{
    int i = 0;
    PNODE tmp = pHead;
//    if(NULL == tmp->pNext)
    //    return false;
    while(NULL != tmp && i1)
    {
        tmp = tmp->pNext;
        ++i;
    }
    if(NULL == tmp || i > pos-1)**//在这里判断**
    {
        return false;
    }
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    if(NULL == pNew)
    {
        printf("链表创建失败!");
        exit(-1);
    }
    pNew->data = val;
    pNew->pNext = tmp->pNext;
    tmp->pNext = pNew;
    return true;
} 

知道为什么了,在判断条件前面还有个循环,
while循环还是执行了,tmp指向了NULL,所以后面if里的代码能被执行
结论是:头节点被创建出来了就不会是NULL。