30/09/2018, 18:50

Các anh chị ơi giúp e bài Danh sách liên kết C++ với ạ e nhập vao được nhưng mà không in ra được ạ

#include<iostream>
using namespace std;
//b1 khai bao cau truc du lieu danh sach lien ket don.
//b2:khoi tao danh danh sach lien ket don.
//b3. Tao NODE trong danh sach.
//b4 them node(them dau hoac cuoi).(pNext luon chay tu head den tail.
//b5. nhap du lieu cho danh sach.
class NODE{
	int data;
	NODE *pNext;
	public: 
	
	friend class List;
	};
class List{
		NODE *pHead;
		NODE *pTail;
		int n;
		public: 
		List(){
			pHead=pTail=NULL;
			n=0;
		}
	
		 void Init(List &l);//khoi tao mang du lieu b2
		NODE * getNode(int x);//du lieu dua vao data. b3.
		void AddHead(List &l,NODE *p);//them node vao dau danh sach.
		void AddTail(List &l, NODE *p);
		void InPut(List &l);
		void OutPut(List l);
	};

void List::Init(List &l){
	l.pHead=l.pTail=NULL;
}
NODE* List:: getNode(int x){
	NODE *p=new NODE;//cap phat 1 node.
	if(p==NULL){
		return NULL;
	}
	p->data=x;//luu x vao data.
	p->pNext=NULL; //khoi tao moi lien ket.	
		
	return p;
}
void List::AddHead(List &l,NODE *p){
	if(l.pHead==NULL ){//neu danh sach bi rong.
		l.pHead=l.pTail=NULL;
	}
	else //neu danh sach khong rong.
	{
		p->pNext=l.pHead;// p quang day de tham gia vao danh sach 
		l.pHead=p;		//p chinh thuc dung dau danh sach.
		
	}
	
}
void List::AddTail(List &l,NODE *p){
	if(l.pHead==NULL ){
		l.pHead=l.pTail=NULL;
	}
	else //neu danh sach khong rong.
	{
	l.pTail->pNext=p;// l.pTail quang day tro toi P
		l.pTail=p;		//p chinh thuc dung dau danh sach.
		
	}
} 
void List::InPut(List &l){
	
	cout<<"
nhap so phan tu: ";
	cin>>n;
	Init(l);//khoi tao danh sach.
	for(int i=1;i<=n;i++){
		int x;
		cout<<"
nhap vao data: ";
		cin>>x;
		NODE *p=getNode(x);//dua data vao node p.
		AddTail(l,p);
	}
	}
void List::OutPut(List l){
		for(NODE *p=l.pHead; p !=NULL;p=p->pNext)
		{
			cout<<p ->data;
		}
	}
	

main(){
	List l;
l.InPut(l);
l.OutPut(l);

}
Vu Van Chung viết 20:53 ngày 30/09/2018

Mình chưa code thử nhưng mình thấy có một số vấn đề.
trong hàm void List::AddTail(List &l,NODE *p) của bạn mình không hiểu chỗ

if(l.pHead==NULL ) {
		l.pHead=l.pTail=NULL;
	}

tại sao l.pHead=NULL lại gán lại nó một lần nữa?
Tiếp là cái hàm AdHead bạn viết nhưng ko dùng?
ban đầu khi danh sách của bạn chưa có gì tức i = 1 thì trong hàm addTail nó chỉ luôn thực hiện cái if đầu mà ko bao giờ thực hiện cái else cả do l.pHead luôn là null.

Quang Nguyen viết 20:59 ngày 30/09/2018

cảm ơn bạn rật nhiều

Bài liên quan
0