Lỗi hàm xoá Cuối trong danh sach liên kết đơn

#include<iostream>
#include<string>
using namespace std;
struct data
{
	long ma;
	string ten;
	int thuTusv;
};
struct SinhVien
{
	struct data dulieu;
	struct 	SinhVien *pNExt = NULL;
};
typedef SinhVien SVV;
struct List
{
	SVV *pHead = NULL;
	SVV *pTail = NULL;

};
SVV *GetNode(data dulieunhap){
	SVV*p = new SVV;
	p->dulieu = dulieunhap;
	p->pNExt = NULL;
	return p;
}
void AddHead(List &l, SVV *p){
	if (l.pHead == NULL)l.pHead = l.pTail = p;
	else
	{
		p->pNExt = l.pHead;
		l.pHead = p;
	}
}
void AddTail(List &l, SVV*p){
	if (l.pHead == NULL)l.pHead = l.pTail = p;
	else
	{
		l.pTail->pNExt = p;
		l.pTail = p;
	}
}
void Input(List &l){
	int n;
	data dulieu;
	cout << "\nNhap So Luong Sinh Vien : ";
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cout << "\nNhap Thong Tin Sinh Vien Thu : ";
		cin >> dulieu.thuTusv;
		cout << "\n Nhap MA SInh Vien Thu  " << i + 1 << " : ";
		cin >> dulieu.ma;		cin.ignore();
		cout << "\nNhap Ho va Ten Sinh Vien Thu " << i + 1 << " : ";

		getline(cin, dulieu.ten);
		SVV*p = GetNode(dulieu);
		AddHead(l, p);
	}
}
void outPut(List l){
	int dem = 1;
	for (SVV*p = l.pHead; p != NULL; p = p->pNExt)
	{
		cout << "\nTHong Tin Sinh Vien Thu : " << p->dulieu.thuTusv;
		cout << "\nMA Sinh Vien Thu: " << p->dulieu.ma << endl;
		cout << "\nHo va Ten Sinh Vien Thu: " << p->dulieu.ten << endl;
	}
}
void xoadau(List &l){
	SVV*p = l.pHead->pNExt;
	delete l.pHead;
	l.pHead = p;
}

void xoaCuoi(List &l)
{
	SVV *qxoa, *q;
	for (qxoa = l.pHead; qxoa != l.pTail; qxoa = qxoa->pNExt)
	{
		q = qxoa;
	}
	if (qxoa == l.pHead)
		xoadau(l);
	else
	{
		qxoa = l.pTail;
		q->pNExt = NULL;
		delete[]qxoa;
	}
}
void XoaKhoangsauSVV(List &l, SVV*p){
	for (SVV*g = l.pHead; g != NULL; g = g->pNExt)
	{
		SVV *q = new SVV;
		if (g->dulieu.thuTusv == p->dulieu.thuTusv){
			q = g->pNExt;
			g->pNExt = q->pNExt;
			delete q;
			return;
		}
	}
}
void xoaPhantuThuk(List &l){
	int k;
	cout << "\nNhap Phan Tu Can Xoa Thu : ";
	cin >> k;
	SVV*z = l.pHead;
	for (SVV*p = l.pHead->pNExt; p != NULL; p = p->pNExt)
	{
		if (p->dulieu.thuTusv == k){
			XoaKhoangsauSVV(l, p);
			p = z;
		}
		z = p;
	}
	if (l.pHead->dulieu.thuTusv == k)xoadau(l);
	if (l.pTail->dulieu.thuTusv == k)xoaCuoi(l);
}
void Breakpoint(List &l){
	SVV*p = new SVV;
	while (p != NULL)
	{
		p->pNExt = l.pHead;
		delete p;
		p->pNExt = l.pHead->pNExt;
	}
}
void main(){
	List l;
	Input(l);
	outPut(l);
	xoaPhantuThuk(l);
	Breakpoint(l);
}

------------------- Lỗi ở hàm xoá cuối

  • có nhiều lỗi quá
    Phải xét 3 th:
  • list rỗng phead=ptail=null
  • list 1 nút phead=ptail#null
  • list >1 nút
    Hàm xoá đầu chưa xét phead==NULL mà đã truy cập phead->pnext? Khi phead=ptail thì xoá xong cũng phải gán =Null của node bị xoá
    Tương tự ở hàm xoá cuối

oke,nhưng nó báo lỗi ở hàm XoakhoangsauSVV lỗi g->pNExt = q->pNExt;

Mình dùng g++ (bộ gcc) để build không thấy báo lối gì cả.
Bạn dùng compiler gì? message báo lỗi là gì?

bạn có hàm xoá phần tử thứ k không.

Mình copy full chương trình của bạn và build không lỗi.

sao mình bị lỗi nhỉ. VD mình nhập số sinh viên cần nhập là 2, thêm vào đầu danh sách và xoá thutusinhvien==1; thì nó bị lỗi , chẳng nhé code sai

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?