小萌新在用C++写一个用数组元素创建一个新链表,创建了一个空表之后调用头插法函数时显示发生异常

//小萌新在用C++写一个用数组元素创建一个新链表,创建了一个空表之后调用头插法函数时显示发生的异常: 0xC0000005: 写入位置 0xCDCDCDD1 时发生访问冲突。求各位大佬帮帮孩子吧,代码如下
#include
using namespace std;
struct Node
{
int date;
Node next;
};
int list_headinsert(Node **list, int a[], int n);
int getlist(Node *list, int i);
int main()
{
int *p, n;
cout << "请输入n=";
cin >> n;
p = new int[n];
for (int i = 0; i < n; i++)
{
cout << "请输入第" << i << "个元素=";
cin >> p[i];
}
Node **list = new Node
;
(*list)->next = NULL;
list_headinsert(list, p, n);
for (int i = 1; i < n; i++)
cout << getlist(*list, i) << ' ';
return 1;
}
int list_headinsert(Node **list, int a[], int n)
{
Node *p = new Node;
p->next = NULL;
for (int i = n; i >1; i--)
{
Node*p = new Node;
p->date = a[i];
p->next = (*list)->next;
(*list)->next = p;
}
return 1;
}
int getlist(Node *list, int i)
{
Node *p = list->next;
int j = 1;
if (p == NULL)
{
cout << "空表";
return 0;
}
while (p != NULL && j < i)
{
p = p->next;
j++;
}
return p->date;
}


#include<iostream>
using namespace std;
struct Node
{
    int date;
    Node* next;     //Error1:next为下一个Node的指针
};
int list_headinsert(Node **list, int a[], int n);
int getlist(Node *list, int i);
int main()
{
    int *p, n;
    cout << "请输入n=";
    cin >> n;
    p = new int[n];
    for (int i = 0; i < n; i++)
    {
        cout << "请输入第" << i << "个元素=";
        cin >> p[i];
    }
    Node *list = new Node;  //Error2:list是一个Node型指针,指向头结点
    list->next = NULL;      //Error3:初始化问题
    list_headinsert(&list, p, n);
    for (int i = 0; i < n; i++)     //Error4:下标问题,一般用左闭右开[0,n)
        cout << getlist(list, i) << ' ';
    return 0;               //Error5:非0返回表示程序异常退出
}
int list_headinsert(Node **list, int a[], int n)
{
    Node *p = new Node;
    p->next = NULL;
    for (int i = n-1; i >= 0; i--)      //Error6::下标错误,[0,n),反向为[n-1,0]
    {
        Node*p = new Node;
        p->date = a[i];
        p->next = (*list)->next;
        (*list)->next = p;
    }
    return 1;
}
int getlist(Node *list, int i)
{
    Node *p = list->next;
    int j = 0;          //Error7:下标错误
    if (p == NULL)
    {
        cout << "空表";
        return 0;
    }
    while (p != NULL && j < i)
    {
        p = p->next;
        j++;
    }
    return p->date;
}