Làm thế nào để bắt lỗi thêm trước trong single list

Đoạn hàm này của e đã chạy nhưng còn một lỗi mà em chưa sửa được đó là nếu trong danh sách liên kết q là node đầu tiên của danh sách và nó không phải là node duy nhất thì sẽ không thêm được p vào trước q.

void them_P_Truoc_Q(LIST &l, NODE *p){
	int x;
	cout<<"\nNhap x: ";
	cin>>x;
	NODE *q = createNode(x);
	if(q->data == l.pHead->data && l.pHead->pNext == NULL){
		themVaoDau(l,p);
	}
	else{
		NODE *g = new NODE; // NODE g chinh la node giu lien ket node nam truoc node q trong danh sach
		for(NODE *k = l.pHead; k != NULL; k = k->pNext){
			if(q->data == k->data){
				//Them node p vao sau node g
				NODE *h = createNode(p->data);
				NODE *tg = g->pNext;
				h->pNext = tg;
				g->pNext = h;
			}
			g = k;// giu lien ket node nam truoc node q trong danh sach			
		}
	}
}
Hien thi danh sach lien ket don
 1       2       3       4
Nhap lua chon cua ban: 4

Nhap gia tri NODE can them vao truoc: 69

Nhap x: 1

Hien thi danh sach lien ket don
 1       2       3       4
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?