c++ linked list delete node

#include <iostream>

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

void deleteNode(Node*& head, int key) {
    Node* temp = head;
    Node* prev = nullptr;

    if (temp != nullptr && temp->data == key) {
        head = temp->next;
        delete temp;
        return;
    }

    while (temp != nullptr && temp->data != key) {
        prev = temp;
        temp = temp->next;
    }

    if (temp == nullptr)
        return;

    prev->next = temp->next;
    delete temp;
}

void printList(Node* node) {
    while (node != nullptr) {
        std::cout << node->data << " ";
        node = node->next;
    }
    std::cout << std::endl;
}

int main() {
    Node* head = new Node{1, nullptr};
    head->next = new Node{2, nullptr};
    head->next->next = new Node{3, nullptr};
    head->next->next->next = new Node{4, nullptr};

    std::cout << "Original Linked List: ";
    printList(head);

    int keyToDelete = 3;
    deleteNode(head, keyToDelete);

    std::cout << "Linked List after deleting node with data " << keyToDelete << ": ";
    printList(head);

    return 0;
}