Em mới học cấu trúc dữ liệu, có bài tập sau mà chưa giải quyết được. Anh/chị nào giải giúp em với ạ. Càng chi tiết càng tốt. Em xin cảm ơn trước ạ.


Cấu trúc Node<T> dùng để định nghĩa một nút trong danh sách liên kết (linked-list) được định nghĩa bằng đoạn mã nguồn dưới đây. Không được chỉnh sửa mã nguồn này khi làm các câu hỏi bên dưới:
Mã:
#include <iostream>
using namespace std;
template<class T>
struct Node {
	T data; //thành phần dữ liệu
	Node* pNext; //Trỏ nút kế tiếp
};
template<class T>
void insertAtFirst(Node<T>* &head, const T &dat) {
	Node<T> *tmp = head, *newnode = new Node<T>;
	if (newnode != NULL) {
		head = newnode;
		newnode->pNext = tmp; newnode->data = dat;
}
}
a. Hãy viết hàm thêm 1 nút (có thành phần dữ liệu là Val có kiểu T) vào cuối danh sách liên kết.
b. Hãy viết hàm tìm 1 nút sao cho trường data của nút đó bằng với giá trị Val (kiểu T) cho trước.
c. Hãy viết hàm giải phòng dữ liệu đã cấp phát cho danh sách liên kết với nút đầu là head