Hỏi về danh sách liên kết đơn

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);
}
 

tengiday

Happy life
function cho nhập vào 1 phần tử sau vị trí nào đó thì cần phải có vòng 'for' tìm đến vị trí đó rồi tạo node mới gán vào chứ.
Mã:
 void insertAfter(List &l, int pos, int x) ...
 

Thống kê

Chủ đề
100,667
Bài viết
467,441
Thành viên
339,833
Thành viên mới nhất
duythinh2222
Top