忙活了一晚上也没做出来,救救 1.创建一个单链表,该单链表中元素数据为A、B、C、D、E、F

1.创建一个单链表,该单链表中元素数据为A、B、C、D、E、F,完成单链表的按值查找,若能找到则输出已找到,反之则显示该值不在单链表中
2.完成在第一题的单链表中插入元素M和Z,完成后输出该单链表中所有元素。


#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode  
{
    ElemType data;
    struct LNode *next;        //指向后继结点
} LinkNode;    
void CreateListR(LinkNode *&L,ElemType a[],int n)
//尾插法建立单链表
{
    LinkNode *s,*r;
    L=(LinkNode *)malloc(sizeof(LinkNode));      //创建头结点
    L->next=NULL;
    r=L;                    //r始终指向终端结点,开始时指向头结点
    for (int i=0;i<n;i++)
    {    
        s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点s
        s->data=a[i];
        r->next=s;            //将结点s插入结点r之后
        r=s;
    }
    r->next=NULL;            //终端结点next域置为NULL
}
void InitList(LinkNode *&L)
{
    L=(LinkNode *)malloc(sizeof(LinkNode));      //创建头结点
    L->next=NULL;
}
void LocateElem(LinkNode *L,ElemType e)
{
    LinkNode *p=L->next;
    int n=1;
    while (p!=NULL && p->data!=e)
    {    p=p->next;
        n++;
    }
    if (p==NULL)
        printf("未找到\n");
    else
        printf("已找到\n");
}
bool ListInsert(LinkNode *&L,int i,ElemType e)
{
    int j=0;
    LinkNode *p=L,*s;
    if (i<=0) return false;            //i错误返回假
    while (j<i-1 && p!=NULL)        //查找第i-1个结点p
    {    j++;
        p=p->next;
    }
    if (p==NULL)                    //未找到位序为i-1的结点
        return false;
    else                            //找到位序为i-1的结点*p
    {    s=(LinkNode *)malloc(sizeof(LinkNode));//创建新结点*s
        s->data=e;
        s->next=p->next;            //将s结点插入到结点p之后
        p->next=s;
        return true;
    }
}
void DispList(LinkNode *L)
{
    LinkNode *p=L->next;
    while (p!=NULL)
    {    printf("%c ",p->data);
        p=p->next;
    }
    printf("\n");
}
int main()
{
    char a[]={'A','B','C','D','E','F'};
    LinkNode *L;
    InitList(L);
    CreateListR(L,a,6);
    LocateElem(L,'B');
    ListInsert(L,6,'M');
    ListInsert(L,7,'Z');
    DispList(L);
    return 0;
}