Skip to main content
edited tags
Link
200_success
  • 144.2k
  • 22
  • 188
  • 473
Source Link

Deleting a Specific Node from a Linked List

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?