创建带头节点且含有6个数据结点的单链表,结点的值通过键盘输入,然后显示各结点 的值。并在链表第3个位置处插入一新的结点,值为30。(请使用“头插法”创建链 表)

创建带头节点且含有6个数据结点的单链表,结点的值通过键盘输入,然后显示各结点
的值。并在链表第3个位置处插入一新的结点,值为30。(请使用“头插法”创建链
表)

供参考:

#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Lnode {
    ElemType      data;
    struct Lnode* next;
}Lnode, * LinkList;
void DispList(LinkList L) 
{
    Lnode* p = L->next;
    while (p != NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
void CreatList_H(LinkList* L, int n) { //头插法
    (*L) = (LinkList)malloc(sizeof(Lnode));
    (*L)->next = NULL;               
    int i = 0;
    for (i = 0; i < n; i++) {
        Lnode* p = (LinkList)malloc(sizeof(Lnode));
        scanf("%d", &p->data);
        p->next = (*L)->next;
        (*L)->next = p;      
    }
}
void InsertNode(LinkList L,int pos, ElemType e)//插入函数
{
    int i = 0;
    LinkList p = L, q = NULL;
    if (pos < 1) return;
    while (p->next && i < pos - 1) {
        i++;
        p = p->next;
    }
    if (!p->next)  return;
    q = (Lnode*)malloc(sizeof(Lnode));
    q->data = e;
    q->next = NULL;
    q->next = p->next;
    p->next = q;
}
int main() 
{
    LinkList L;
    CreatList_H(&L, 6);//“头插法”创建含有6个数据结点链表
    DispList(L);       // 显示各结点的值

    InsertNode(L, 3, 30);//在链表第3个位置处插入一新的结点,值为30。
    DispList(L);      // 显示各结点的值
    return 0;
}