#include <iostream>
using namespace std;

struct Node{
    int data;
    Node* pNext;
};

void deleteAtBeginning(Node* &pHead);
void deleteANode(Node*& pHead, int k);
void deleteAllNode(Node*& pHead, int k);

//-----------------------------------------------------//

void deleteAtBeginning(Node* &pHead) {
    Node* cur = pHead;
    if (pHead) pHead = pHead->pNext;
    delete cur;
}

//-----------------------------------------------------//

void deleteANode(Node*& pHead, int k) {
    if(pHead != nullptr && pHead->data == k) {
        deleteAtBeginning(pHead);
        return;
    }

    Node* tmp = nullptr;
    Node* cur = pHead;
    while(cur != nullptr && cur->data != k) {
        tmp = cur;
        cur = cur->pNext;
    }
    if (cur == nullptr) return;
    tmp->pNext = cur->pNext;
    delete cur;
}

//-----------------------------------------------------//

void deleteAllNode(Node*& pHead, int k) {
    while (pHead != nullptr && pHead->data == k) deleteAtBeginning(pHead);
    if (pHead == nullptr) return;
    
    for (Node *cur = pHead; cur->pNext != nullptr; ) {
        if(cur->pNext->data == k)
            deleteAtBeginning(cur->pNext);
        else
            cur = cur->pNext;
    }
}

//-----------------------------------------------------//

int main() {}