public Node<T> deleteNode(T data) {
      if (_root == null) {
         return null;
      }

      if (_root.Data == data) {
         _root = _root.Next;
         return _root;
      }

      Node<T> temp = _root;

      while (temp.Next != null) {
         if (temp.Next.Data == data) {
            if (temp.Next == _end) {
               _end = temp;
               temp.Next = null;
            } else {
               temp.Next = temp.Next.Next;
            }

            break;
         }

         temp = temp.Next;
      }

      return _root;
   }