链表中按顺序插入的操作用C语言实现的结果不对

listnodep insert_mid(listnodep head, listnodep newnode) //按排序顺序进行链表的建立
{
if (head == NULL)
head = newnode;

listnodep temp = head;
listnodep pre;
while (temp->nextptr != NULL)
{
    if (newnode->data > temp->data)
    {
        pre = temp;
        temp = temp->nextptr;
    }
    else
        break;
}
pre->nextptr = newnode;
newnode->nextptr = temp;
return head;

}
这是我刚刚写的一个调用函数,实现的功能:按升序顺序进行链表排列;传入的参数:指向链表的头指针,要插入新的结点;
但是没有达到想要实现的功能,请大神赐教

感觉错误好多,,,表达也不清晰

当插入第一个节点的时候,pre没有初始化,程序会断掉的。

要将创建头节点和加入新的节点区分开来