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();
}
Bài liên quan
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.
Và sao lại dùng *AddHead mà không phải là AddHead vậy ạ ?
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
void* hình như là giống kiểu bool trong bài này