hàm này dùng để tạo ra một node để thêm vào danh sách.
4 dòng đầu là cấp phát bộ nhớ rồi kiểm tra xem có cấp phát được không nếu không thì trả về NULL.
2 dòng tiếp theo là gán cho node->data là x, cho nó trỏ tới null (để xử lý tiếp)
cuối cùng là trả về một Node, Node này là còn trỏ.
Bạn xem thêm cái hàm addtail vd:
void addtail(list &l, node *p)
{
if (l.phead == NULL)
{
l.phead = l.ptail = p;
}
else
{
l.ptail->pnext = p; // con trỏ p tail trỏ tới p
l.ptail = p;// p thành tail
}
}
Lúc mới đầu cái danh sách nó chỉ có một node p (1) tạo ra từ hàm GetNode ở trên, con trỏ phead với ptail đều trỏ tới p, nhưng khi bạn muốn thêm môt node vào đuôi nữa thì lúc này con trỏ ptail trỏ tới p(2) và p(2) biến thành con trỏ ptail. Lý do tại sao hàm GetNode nó trả về NODE* là vậy tại vì nó cần phải trỏ đi đâu đó khi bạn muốn thêm một node vào. p(1) p(2) …p(n) được tạo ra từ GetNode.