单链表的内存泄露问题

请问,这段代码有哪里存在内存泄漏的情况吗

#include
#include 
using namespace std;

int len;


struct LinkedList {
        int x;
        LinkedList *next=nullptr;

 LinkedList *head=nullptr;
 LinkedList *get(int i) {
        LinkedList *a,*b;
        a=head;
    while (i>0&&i<=len) {
        b=a->next;
        a=b;
        i--;
    }
    return b;
    }


    void initialize() {
        int n;
        scanf("%d", &n);
        len=n;
        int *a = new int[n];
        for(int i = 0; i < n; i++) scanf("%d", &a[i]);

        LinkedList *p;
        head=new LinkedList;
            p=new LinkedList;
           head->next=p;
            for (int i = 1;iq=new LinkedList;
               (get(i)->next)=q;
            }
        for(int i = 0; i < n; i++)
        {
           get(i+1)->x=a[i];

        }

        delete[] a;

    }

    void insert(int i, int x) {
        LinkedList *tmp=new LinkedList;
                tmp->x=x;
        if(i==len) {get(len)->next=tmp;}
        else {tmp->next=get(i+1);
        get(i)->next=tmp;
        }
        len++;
    }

    void erase(int i) {
        LinkedList *tmp,*tmlp;
        if(i>1&&itmp=get(i-1);tmlp=get(i);
            tmp->next=tmlp->next;
            tmlp->x=0;
            delete tmlp;
           len--;
        }
        if(i==1) {tmp=get(1);
            head->next=get(2);
            tmp->x=0;
            delete tmp;
            len--;}
        if(i==len) {
            tmp=get(len-1);tmlp=get(len);
            tmp->next=nullptr;
            tmlp->x=0;
            delete tmlp;len--;
        }
    }

    void swap() {
        if(len%2==0){int a[len/2],b[len/2];
        for (int i=1;i<=len;i++){
            if(i%2!=0) a[(i+1)/2]=get(i)->x;
            else b[i/2]=get(i)->x;
        }
        for (int j=1;j<=len;j++){
            if(j%2!=0) get(j)->x=b[(j+1)/2];
            else get(j)->x=a[j/2];
        }


        }
        else {int a[len-1/2],b[len-1/2];
        for (int i=1;i<=len-1;i++){
            if(i%2!=0) a[(i+1)/2]=get(i)->x;
            else b[i/2]=get(i)->x;
        }
        for (int j=1;j<=len-1;j++){
            if(j%2!=0) get(j)->x=b[(j+1)/2];
            else get(j)->x=a[j/2];
        }


        }
    }

    void moveback(int i, int x) {
        LinkedList *p,*q,*a,*b,*y;
        p=get(1);q=get(i);
        a=get(i+x);b=get(i+x+1);y=get(i+1);
        head->next=y;
        a->next=p;q->next=b;

    }

    int query(int i) {
        int l=get(i)->x;
        return l;    }


    void printAll() {
        for (int i=1;i<=len;i++)
        {
            cout<<get(i)->x<<' ';
        }
        cout << endl;
    }

    void ClearMemory() {
        LinkedList *p=head->next,*q;
        head->next=NULL;
        while(p!=NULL&&p->next!=nullptr){
            q=p->next;
            delete p;
            p=q;
        }
        len=0;
delete head;
    }
};

int main() {
    LinkedList List;
    int m, op, i, x;
    List.initialize();
    scanf("%d", &m);
    while(m--) {
        scanf("%d", &op);
        if(op == 1) {
            scanf("%d%d", &i, &x);
            List.insert(i, x);
        }
        else if(op == 2) {
            scanf("%d", &i);
            List.erase(i);
        }
        else if(op == 3) {
            List.swap();
        }
        else if(op == 4) {
            scanf("%d%d",&i, &x);
            List.moveback(i, x);
        }
        else if(op == 5) {
            scanf("%d", &i);
            printf("%d\n", List.query(i));
        }
        else if(op == 6) {
            List.printAll();
        }
    }
    List.ClearMemory();
    return 0;
}


struct LinkedList {
        int x;
        LinkedList *next=nullptr;
 
 LinkedList *head=nullptr;
 LinkedList *get(int i) {
        LinkedList *a,*b;
        a=head;
    while (i>0&&i<=len) {
        b=a->next;
        a=b;
        i--;
    }
    return b;
    }

这里不是函数,而是结构体定义,写得好奇怪


明白了,你上面少了一个花括号