Nhập, xuất danh sách liên kết đơn

Mọi người giúp em xem vì sao khi em nhập các Node ra xong bước tiếp theo xuất thì nó bị lỗi.

#include "stdio.h"
#include "conio.h"

//1 - Khai bao cau truc du lieu danh sach lien ket don
struct Node
{
	int data;
	struct Node* pNext;
};
typedef struct Node NODE;

struct List
{
	struct Node *pHead;
	struct Node *pTail;
};
typedef struct List LIST;

//2 - Khoi tao danh sach lien ket
void Init(LIST &l)
{
	l.pHead = l.pTail = NULL;
}

//3 - Tao NODE Trong Danh Sach
NODE *GetNode(int x) //x la du lieu dua vao data
{
	//Cap phat 1 Node
	NODE *p = new NODE;

	if (p == NULL)
	{
		return NULL;
	}
	p -> data = x; //Luu x vao data
	p->pNext == NULL;
	return p;
}

//4 - Them NODE vao danh sach (Vao dau hoac vao cuoi)
void AddHead(LIST &l, NODE *p)
{
	if (l.pHead == NULL)
	{
		l.pHead = l.pTail = p;
	}
	else
	{
		p->pNext = l.pHead; //p quang day de tham gia vao danh sach lien ket
		l.pHead = p;
	}
}

void AddTail(LIST &l, NODE *p)
{
	if (l.pHead == NULL)
	{
		l.pHead = l.pTail = p;
	}
	else
	{
		l.pTail->pNext = p;
		l.pTail = p;
	}
}

void Input(LIST &l, int n)
{
	int x;
	Init(l);	//Khoi tao cho danh sach lien ket
	for (int i = 1; i <= n; i++)
	{
		printf("Nhap Du Lieu Cho Du Lieu Cua Node Thu %d: ", i);
		scanf("%d", &x);
		NODE *p = GetNode(x);
		AddHead(l, p);
	}
}

void Output(LIST l)
{
	int i = 1;
	for (NODE *p = l.pHead; p != NULL; p = p->pNext)
	{
		printf("Gia Tri Node Thu %d La: %d\n", i++, p->data);
	}
}

int main()
{
	LIST l;
	int n;
	printf("Nhap So Node Ban Muon Tao: ");
	scanf("%d", &n);
	Input(l, n);
	Output(l);
	getch();
	return 0;
}

void AddHead(LIST &l, NODE *p)
{
if (l.pHead == NULL){
l.pHead = l.pTail = p;
p->pNext = NULL;
}
else {
p->pNext = l.pHead; //p quang day de tham gia vao danh sach lien ket
l.pHead = p;
}
}

sửa lại hàm này là chạy ngon nhé b :smile:

Lỗi ở hàm GetNode, dòng p->pNext == NULL, phải là p->pNext = NULL chứ. Và hàm input cũng sai nữa, bạn phải addTail chứ, sao lại addHead được, làm vậy nó đảo ngược giá trị của các phần tử trong LIST hết

Comment k cần thiết hơi nhiều :slight_smile:

2 Likes

à, mình đã hiểu ý bạn nói, cảm ơn bạn nhiều nha :smile:

không hiểu sao cái mình gọi hàm xuất mà nó rơi vào vòng lặp vô tận, và chỉ xuất ra giá trị n !
cảm ơn mn!

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