Em đang học về danh sách liên kết đơn nên mong mọi người giúp đỡ.
Viết chương trình thực hiện các công việc sau trên một danh sách các số (sử dụng cấu trúc dữ liệu danh sách liên kết đơn để lưu trữ).
1. Tạo danh sách số.
2. Thêm một phần tử vào danh sách, vị trí thêm vào do người dùng chọn.
3. Nhập vào một số k (k0), đếm xem trong dãy có bao nhiêu số có giá trị = k?
4. Kiểm tra xem trong danh sách có 3 số chẵn dương đứng cạnh nhau hay không? Nếu có hãy in ra vị trí của các số này.
5. Sắp xếp danh sách theo thứ tự tăng dần.
6. Xóa tất cả các số nguyên tố trong danh sách.
7. Xóa tất cả các phần tử có giá trị trùng nhau trong danh sách, chỉ giữ lại 1 số.
Hiện tại em xem và mày mò trên mạng thì mới làm được cái 1 nên ai có thể giúp em làm mấy cái còn lại không ạ?Thời gian em phải nộp bài sắp đến rồi mà bây giờ em vẫn chưa hiểu rõ về cái dslk đơn này nên mong m.n giúp em với ạ.
CODE của em đây ạ

Code:
#include <iostream>
using namespace std;
struct node {
	int data;
	struct node *pNext;
};
typedef struct node NODE;
struct list {
	NODE *pHead;
	NODE *pTail;
};
typedef struct list LIST;

void KhoiTao(LIST &l) {
	l.pHead = NULL;
	l.pTail = NULL;
}
NODE* KhoiTaoNODE(int x) {
	NODE* p = new NODE;
	if (p == NULL) {
		cout << "Khong du bo nho de cap phat!" << endl;
		return NULL;
	}
	p->data = x;
	p->pNext = NULL;
	return p;
}
void ThemVaoDau(LIST& l, NODE* p) {
	if (l.pHead == NULL) {
		l.pHead = l.pTail = p;
	}
	else {
		p->pNext = l.pHead;
		l.pHead = p;
	}
}
void ThemVaoCuoi(LIST& l, NODE* p) {
	if (l.pTail == NULL) {
		l.pHead = l.pTail = p;
	}
	else {
		l.pTail->pNext = p;
		l.pTail = p;
	}
}
void XuatDanhSach(LIST l) {
	for (NODE *k = l.pHead; k != NULL; k = k->pNext) {
		cout << "\t" << k->data << "  ";
	}
}
float DemSoK(LIST& l) {
	int dem=0;
	int k;
	cout << "Nhap k:";
	cin >> k;
	for (NODE* p = l.pHead; p != NULL; p = p->pNext) {
		if (k == p->data) {
			dem++;
		}
	}
	return dem;
}
void Menu(LIST& l) {
	int choice;
	do {
		system("cls");
		cout << "1.Tao danh sach so " << endl;
		cout << "2.Xuat danh sach so" << endl;
		cout << "3.Them mot phan tu vao dau danh sach" << endl;
		cout << "4.Them mot phan tu vao cuoi danh sach" << endl;
		cout << "5.Nhap vao mot so k va dem xem trong day co bao nhieu so co gia tri = k" << endl;
		cout << "6.Kiem tra trong day co 3 so chan dung canh nhau hay khong (neu co thi in ra)" << endl;
		cout << "7.Sap xep danh sach theo thu tu tang dan" << endl;
		cout << "8.Xoa tat ca cac so nguyen to trong danh sach" << endl;
		cout << "9.Xoa tat ca cac so co gia tri trung nhau trong danh sach, chi giu lai 1 so" << endl;
		cout << "Ban chon: "; cin >> choice;
		switch (choice) {
		case 1: {
			int x;
			cout << "Nhap so:";
			cin >> x;
			NODE* p = KhoiTaoNODE(x);
			ThemVaoCuoi(l, p);
		}
				break;
		case 2: {
			cout << "\tXuat danh sach lien ket" << endl;
			XuatDanhSach(l);
			cout << endl;
			system("pause");
		}
				break;
		case 5: {
		   float d = DemSoK(l);
		   cout << "Co " << d << "so co gia tri bang k";
		}
				break;
		}
	} while (choice != 9);

}
int main() {
	LIST l;
	KhoiTao(l);
	Menu(l);
	return 0;
}