使用c语言建立一符合下列要求的函数

已知head指向一个带头结点的单向链表,链表中每个结点包含字符型数据域(data)和指针域(next)。请编写函数实现在值为a的结点前插入值为key的结点,若没有值为a的结点,则插在链表最后。

遍历链表,用头节点的next。找到值为a的节点,在前面插入新节点即可

#include <stdio.h>
typedef struct _linknode
{
    int data;
    struct _linknode *next;
}linknode,*linklist;

void creat(linklist L)
{
    int i=0;
    linklist p = L,q=NULL;
    for(i=0;i<5;i++)
    {
        q = (linklist)malloc(sizeof(linknode));
        scanf("%d",&q->data);
        q->next = NULL;
        p->next =  q;
        p = q;
    }
}

void insert(linklist L,int a,int m)
{
    linklist p = L,q,t;
    q = (linklist)malloc(sizeof(linknode));
    while(p->next != NULL)
    {
        if(p->next->data == a)
        {
            break;
        }
        p = p->next;
    }
    t = p->next;
    p->next = q;
    q->next = t;
}

int main()
{
    //已知head指向一个带头结点的单向链表,链表中每个结点包含字符型数据域(data)和指针域(next)。请编写函数实现在值为a的结点前插入值为key的结点,若没有值为a的结点,则插在链表最后。
    linknode head;
    int a,m;
    head.next = NULL;
    creat(&head);
    scanf("%d%d",&a,&m);
    insert(&head,a,m);
    return 0;
}