删除单链表(带头结点,头插入法建立单链表)的第i个结点

谁方便帮我看一下程序吗?卡住了,问题是:删除单链表(带头结点,头插入法建立单链表)的第i个结点


#include
#include
#include
using namespace std;
typedef struct Node
{
    int data;
    struct Node*next;
}Node,*LinkList;
void Initlist(LinkList &L)
{
    L=(Node*)malloc(sizeof(Node));
    L->next=NULL;
}
void Creatlist(LinkList &L,int a[100],int n)
{
L= (Node *)malloc(sizeof(Node));
    L->next = NULL;   
 
    LinkList p;  
    for (int i = 0; i < n; i++) {
        p = (LinkList )malloc(sizeof(LinkList));  
        p->data = a[i];   
        p->next = L->next;   
        L->next=p;

    }
}
int deleteList (LinkList &L,int m)
{
    if(m<1)
    {
        printf("error\n");
        return 0;
    }
    int i=0;
    LinkList q,p;
    while(q!=NULL&&inext;
    }
    p=q->next;
    q->next=p->next;
    free(p);
    return 1;
}
void OutputList(LinkList &L)
{
    LinkList s;
    s=L->next;
    while(s)
    {
        cout<data<<' ';
        s=s->next;

}
int main()
{
    int n,m,a[100];
    cin>>n;
    LinkList L;
    Initlist(L);
    Creatlist(L,a,n);
    cin>>m;
    if(deleteList(L,m))
    OutputList(L);
    if(L->next==NULL)
    cout<<"null";
    return 0;
}

整体错误修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct Node
{
    int data;
    struct Node* next;
}Node, * LinkList;
void Initlist(LinkList& L)
{
    L = (Node*)malloc(sizeof(Node));
    L->next = NULL;
}
void Creatlist(LinkList& L, int a[100], int n)
{
    //L = (Node*)malloc(sizeof(Node)); L已经初始化过了,这里就多余了。
    //L->next = NULL;                  修改 这两句多余了。
    LinkList p;
    for (int i = 0; i < n; i++) {
        p = (LinkList)malloc(sizeof(Node));    // 修改   
         //(LinkList)malloc(sizeof(LinkList));
        p->data = a[i];
        p->next = L->next;
        L->next = p;
    }
}
int deleteList(LinkList& L, int m)
{
    if (m < 1)
    {
        printf("error\n");
        return 0;
    }
    int i = 0;
    LinkList q = L, p = NULL;    // 修改
    while (q->next != NULL && i < m - 1)   //(q != NULL && i < m) 修改
    {
        i++;
        q = q->next;
    }
    if (!q->next) {            // 修改
        printf("error\n");     // 修改
        return 0;              // 修改
    }
    p = q->next;
    q->next = p->next;
    free(p);
    return 1;
}
void OutputList(LinkList& L)
{
    LinkList s = NULL;
    if (L->next == NULL)   //修改
        cout << "null";
    else {                 //修改
        s = L->next;
        while (s)
        {
            cout << s->data << ' ';
            s = s->next;
        }
        printf("\n");
    }
}

int main()
{
    int n, m, a[20] = { 1,3,5,7,8,9,10,15,14,22,47,25,41,45,66,44,99,102,111,200 };  //修改
    cin >> n;
    LinkList L;
    Initlist(L);
    Creatlist(L, a, n);
    OutputList(L);     //修改

    cin >> m;
    deleteList(L, m); //if (deleteList(L, m)) //修改
    OutputList(L);
                     //if (L->next == NULL)   //修改
                     //cout << "null";        //修改
    return 0;
}


int deleteList (LinkList &L,int m)
{
    if(m<1)
    {
        printf("error\n");
        return 0;
    }
    int i=0;
    LinkList q=L->next,p=L;
    while(q!=NULL&&i<m)
    {
        i++;
        p = q;
        q=q->next;
    }
    if(q==NULL)
        return 0;
    p->next = q->next;
    free(q);
    return 1;