30/09/2018, 21:00

Danh Sách Liên Kết Đơn (Nhập - Xuất)

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
", 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;
}
Chu Minh Ngọc viết 23:14 ngày 30/09/2018

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

Tý Tèo viết 23:10 ngày 30/09/2018

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

Thanh Bình Lê viết 23:14 ngày 30/09/2018

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

Văn Trường Trần viết 23:16 ngày 30/09/2018

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!

Bài liên quan
0