30/09/2018, 17:00

Thắc mắc về DSLK đơn

Em mới học DSLK nên không hiểu một số chỗ : l.Head lưu địa chỉ của node đầu tiên, p->Next lưu địa chỉ của node đứng sau, vậy trong hàm Node *CreateNode(int x) và hàm void *AddHead(List &l, int x) bên dưới thì return p là trả về địa chỉ của ai vậy ạ ?

typedef struct Node
{
	int Val;
	struct Node *Next;
}Node;

typedef struct List
{
	Node *Head;
	Node *Tail;
}List;

void CreateList(List &l)
{
	l.Head = l.Tail = NULL;
}

Node *CreateNode(int x)
{
	Node *p = new Node;
	if(p==NULL)
		return 0;
	p->Val = x;
	p->Next = NULL;
	return p;
}

void *AddHead(List &l, int x)
{
	Node *p = CreateNode(x);
	if(l.Head==NULL)
		l.Head = l.Tail = p;
	else
	{
		p->Next = l.Head;
		l.Head = p;
	}
	return p;
}

void PrintList(List &l)
{
	Node *p = l.Head;
	while(p!=NULL)
	{
		printf("%d",p->Val);
		p = p->Next;
	}
}
void main()
{
	List l;
	AddHead(l,2);
	AddHead(l,5);
	AddHead(l,1);
	AddHead(l,6);
	AddHead(l,9);
	AddHead(l,3);
	PrintList(l);
	getch();
}
Minh Hoàng viết 19:14 ngày 30/09/2018
Node *p = new Node;

bên trong hàm creat sẽ trả về một địa chỉ được cấp phát
còn hàm addHead thì sẽ trả về cũng địa chỉ của node head luôn.

799 viết 19:08 ngày 30/09/2018

Và sao lại dùng *AddHead mà không phải là AddHead vậy ạ ?

Minh Hoàng viết 19:08 ngày 30/09/2018

có thể người viết hàm này muốn tạo một giá trị trả về để kiểm tra xem thằng node head có được tạo ra hay không (có thể không tạo ra trong trường hợp hết vùng nhớ chẳng hạn), bằng cách kiểm tra giá trị trả về có khác NULL hay không. Một thủ thuật thôi

lâm phúc tài viết 19:10 ngày 30/09/2018

void* hình như là giống kiểu bool trong bài này

Bài liên quan
0