mong được các anh chị giúp đỡ ạ. Em đang học danh sách liên đơn và bị vướng ở bài chèn 1 phần tử sau q. Mong các anh chị chỉ giúp em lỗi với ạ, em xin cảm ơn các anh chị đã xem bài.

#include<stdio.h>

#include<stdlib.h>

typedef struct Sinhvien

{

char Ten[30];

int MaSV;

}SV;

struct Node

{

int data;

Node* link;

};

struct List

{

Node* first;

Node* last;

};

Node* GetNode(int x)

{

Node* p=new Node;

if(p==NULL)

{

printf("Khong cap phat duoc!!!");

exit(1);

}

p ->data=x;

p ->link=NULL;

return p;

}

void Init(List &l)

{

l.first=l.last=NULL;

}

void AddFirst(List &l, Node* new_node)

{

if(l.first==NULL)

{

l.first=new_node;

l.last=l.first;

}

else

{

new_node->link=l.first;

l.first=new_node;

}

}

void AddAfter(List &l,Node *q, Node* new_node)

{

if(q!=NULL)

{

new_node->link=q->link;

q->link=new_node;

if(q==l.last)

l.last=new_node;

}

else

AddFirst(l,new_node);

}

void InsertAfter(List &l,Node *q, int x)

{

Node* p=GetNode(x);

if(p==NULL)return;

if(q!=NULL)

{

p->link=q->link;

q->link=p;

if(q==l.last)

l.last=p;

}

else

AddFirst(l,p);

}

void XuatDS(List l)

{

Node* p=l.first;

printf("\ndanh sach da nhap la: \n");

while (p!=NULL)

{

printf("%d\t",p->data);

p=p->link;

}

printf("\n");

}

int main()

{

List l;

Init(l);

int n;

printf("nhap n: ");

scanf("%d", &n);

for(int i=0;i<n;i++)

{

int x;

printf("\nnhap phan tu thu %d: ", i+1);

scanf("%d", &x);

}

int q;

Node *x;

printf("\nNhap vi tri phan tu q: ");

scanf("%d", &q);

printf("\nNhap phan tu can them: ");

scanf("%d", &x);

InsertAfter(l,x,q);

printf("\nDanh sach sau khi them la: \n");

XuatDS(l);

}