My go at creating a function to remove a specific node from a linked list: void deleteSpecific(DataType N, Node *&H, Node *&T) { if (H == nullptr) // 1. Check Whether List Is Empty (head == NULL) { // If It's Empty Then, Display The Following And Terminate The Function. std::cout << std::endl << std::endl; std::cout << "\t" << "-> LL| ERR: The List Is Empty. Deletion Not Possible."; std::cout << std::endl << std::endl; return; } Node *TMP1 = H, *TMP2; // If It's Not Empty Then, Define Two Node Pointers Temp1 And Temp2 And Put Head In Temp1 Only. while (TMP1->data != N) // Keep Moving Temp1 Until it reaches to exact node to delete { if (TMP1->next == nullptr) // If Node is not found in list then display the message and exit the loop and function. { std::cout << std::endl << std::endl; std::cout << "\t" << "-> LL| ERR: Given Node Not Found. Deletion Not Possible."; std::cout << std::endl << std::endl; return; } TMP2 = TMP1; TMP1 = TMP1->next; } if (H->next == nullptr) { H = nullptr; delete TMP1; } else if (TMP1 == H) { H = H->next; delete TMP1; } else if (TMP1->next == nullptr) { TMP2->next = nullptr; T = TMP2; delete TMP1; } else { TMP2->next = TMP1->next; delete TMP1; } } Is The logic of the code correct? I've tried it with multiple inputs and it works, however are there any special cases that you can notice that'll not work with this?