Hàm xoá trên danh sách liên kết đơn bị lỗi

#include<iostream>
#include<string.h>
using namespace std;


struct GiuXe
{
	char Bienso[33];
	int Gio;
	int Phut;
	GiuXe *tiep;
};
struct Tim
{
	char Bienso[33];
	Tim *tiep;
};
struct Search
{
	Tim *dau;
	Tim *cuoi;
};
void TaoTim(Search &n)
{
	n.dau=n.cuoi=NULL;
}
struct List
{
	GiuXe *dau;
	GiuXe *cuoi;
};
void Taolist(List &s)
{
	s.dau=s.cuoi=NULL;
}
GiuXe* Thongtin()
{
	GiuXe* data = new GiuXe[1];
	cout<<"\nNhap bien so xe: ";
	cin.ignore(1);
	cin.getline(data->Bienso,33);
	cout<<"\nNhap gio : ";
	cin>>data->Gio;
	cout<<"\nNhap phut : ";
	cin>>data->Phut;
	data->tiep=NULL;
	return data;
}
void Themcuoi(List &s,GiuXe *data)
{
	if(s.dau==NULL)
	{
		s.dau=s.cuoi=data;
	}
	else
	{
		s.cuoi->tiep=data;
		s.cuoi=data;
	}
}
void Xuat(List &s)
{
	GiuXe *data;
	data=s.dau;
	cout<<"\n================Danh sach xe================";
	cout<<"\nBien so\tGio gui\n";
	while(data!=NULL)
	{
		cout<<data->Bienso<<"\t"<<data->Gio<<":"<<data->Phut<<"\n";
		data=data->tiep;
	}
}
void Xoa(List &s,Search &n)
{
	GiuXe *data;
	GiuXe *p;
	data=s.dau;
	Tim *t= new Tim[1];
	int dem=0;
	cout<<"\nNhap vao bien so xe cua xe ban : ";
	cin.ignore(1);
	cin.getline(t->Bienso,33);
	if(strcmp(s.dau->Bienso,t->Bienso)==0)
		{
			s.dau=data->tiep;
			delete data;
		}
    else
	    {
           	for(data=s.dau;data!=NULL;data=data->tiep)
         	{
	         	 if((data!=NULL)&&(strcmp(data->tiep->Bienso,t->Bienso)==0))
	        	{
		        	data->tiep=p;
		         	data->tiep=p->tiep;
		        	delete p;
		        	dem++;
	        	}
		          else if(dem==0)
		          cout<<"\nKhong co xe nay.";
            } 
        }
	Xuat(s);

}
int main()
{
	Search tim;
	TaoTim(tim);
	int n,i;
	List Kha;
	Taolist(Kha);
	GiuXe *t;
	cout<<"\nNhap suc chua cua bai giu xe: ";
	cin>>n;
	for(i=0;i<n;i++)
	{
		cout<<"\nNhap thong tin xe thu "<<i+1<<endl;
		t=Thongtin();
		Themcuoi(Kha,t);
	}
	Xuat(Kha);
	Xoa(Kha,tim);
}

các anh giúp em cái hàm xoá với. e mò mãi mà không biết lỗi ở đâu

Trong hàm xóa bạn gán ngược rồi kia. Thay cho data->tiep =p thì là p= data->tiep

1 Like

sửa lại nó sai hơn nữa a ơi.

Ở trong câu lệnh if bạn sửa lai fai là data->tiep != null. Và sau khi xóa xong bạn fai dung lenh break để thoát ra vòng lặp. Con thiếu trường hop deleteTail nữa

1 Like

cám ơn anh ạ. e sửa được rồi :slight_smile:

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