Problem p02265 (C++) — buggy submission, verdict: Time Limit Exceeded

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>

using namespace std;

class linkedlist {
public:
  int data;
  linkedlist *next;
  linkedlist *back;
  linkedlist(int n) {
    data = n;
    next = nullptr;
    back = nullptr;
  }
  linkedlist(int n, linkedlist *b) {
    data = n;
    next = nullptr;
    back = b;
  }
  ~linkedlist() {
    if (back && next) {
      linkedlist *t = this->back;
      this->back->next = this->next;
      this->next->back = t;
      return;
    }
    if (back && next == nullptr) {
      this->back->next = nullptr;
      return;
    }
    if (back == nullptr && next) {
      this->next->back = nullptr;
    }
  }
};

class Llist {
public:
  linkedlist *now;
  linkedlist *last;
  Llist() {
    now = nullptr;
    last = nullptr;
  }
  ~Llist() {
    // arekaku
  }
  void _insert(int n) {
    linkedlist *t = new linkedlist(n);
    if (now == nullptr) {
      now = t;
      last = t;
    } else {
      t->back = now;
      now->next = t;
      now = t;
    }
  }
  void _delete(int n) {
    linkedlist *t = now;
    while (t) {
      if (t->data != n) {
        t = t->back;
        continue;
      } else {
        if (t == now) {
          now = (now->back) ? now->back : nullptr;
        }
        if (t == last) {
          last = (last->next) ? last->next : nullptr;
        }
        delete t;
        break;
      }
    }
  }
  void _deleteFirst() {
    if (!now->back) {
      delete now;
      now = nullptr;
      last = nullptr;
      return;
    }
    linkedlist *t = now->back;
    delete now;
    now = t;
  }
  void _deleteLast() {
    if (!now->back) {
      delete now;
      now = nullptr;
      last = nullptr;
      return;
    }

    if (last->next) {
      last = last->next;
      delete last->back;
    } else {
      delete last;
      last = nullptr;
      now = nullptr;
    }
  }
};

int main() {
  // ios::sync_with_stdio(false);
  Llist *l = new Llist();
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    string s;
    int t;
    cin >> s;
    // scanf("%s", s);
    if (s == "deleteFirst") {
      l->_deleteFirst();
      continue;
    }
    if (s == "deleteLast") {
      l->_deleteLast();
      continue;
    }
    scanf("%d", &t);
    if (s == "insert") {
      l->_insert(t);
      continue;
    }
    if (s == "delete") {
      l->_delete(t);
      continue;
    }
  }

  linkedlist *t = l->now;
  while (t) {
    // cout << t->data;
    printf("%d", t->data);
    if (t->back == nullptr) {
      printf("\\n");
    } else {
      printf(" ");
    }
    t = t->back;
  }
  delete l;
  return 0;
}

Error: TLE

Fixed submission:

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>

using namespace std;

class linkedlist {
public:
  int data;
  linkedlist *next;
  linkedlist *back;
  linkedlist(int n) {
    data = n;
    next = nullptr;
    back = nullptr;
  }
  linkedlist(int n, linkedlist *b) {
    data = n;
    next = nullptr;
    back = b;
  }
  ~linkedlist() {
    if (back && next) {
      linkedlist *t = this->back;
      this->back->next = this->next;
      this->next->back = t;
      return;
    }
    if (back && next == nullptr) {
      this->back->next = nullptr;
      return;
    }
    if (back == nullptr && next) {
      this->next->back = nullptr;
    }
  }
};

class Llist {
public:
  linkedlist *now;
  linkedlist *last;
  Llist() {
    now = nullptr;
    last = nullptr;
  }
  ~Llist() {
    // arekaku
  }
  void _insert(int n) {
    linkedlist *t = new linkedlist(n);
    if (now == nullptr) {
      now = t;
      last = t;
    } else {
      t->back = now;
      now->next = t;
      now = t;
    }
  }
  void _delete(int n) {
    linkedlist *t = now;
    while (t) {
      if (t->data != n) {
        t = t->back;
        continue;
      } else {
        if (t == now) {
          if (!now->back) {
            now = nullptr;
            last = nullptr;
          } else {
            now = now->back;
          }
        }
        if (t == last) {
          last = (last->next) ? last->next : nullptr;
        }

        delete t;
        break;
      }
    }
  }
  void _deleteFirst() {
    if (!now->back) {
      delete now;
      now = nullptr;
      last = nullptr;
      return;
    }
    linkedlist *t = now->back;
    delete now;
    now = t;
  }
  void _deleteLast() {
    if (!now->back) {
      delete now;
      now = nullptr;
      last = nullptr;
      return;
    }

    if (last->next) {
      last = last->next;
      delete last->back;
    } else {
      delete last;
      last = nullptr;
      now = nullptr;
    }

    // linkedlist* t = now;
    // while (t)
    //{
    //	if (t->back)
    //	{
    //		t = t->back;
    //		continue;
    //	}
    //	else
    //	{
    //		delete t;
    //		break;
    //	}
    // }
  }
};

int main() {
  Llist *l = new Llist();
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    string s;
    int t;
    cin >> s;
    // scanf("%s", s);
    if (s == "deleteFirst") {
      l->_deleteFirst();
      continue;
    }
    if (s == "deleteLast") {
      l->_deleteLast();
      continue;
    }
    scanf("%d", &t);
    if (s == "insert") {
      l->_insert(t);
      continue;
    }
    if (s == "delete") {
      l->_delete(t);
      continue;
    }

    cout << "ok" << endl;
  }

  linkedlist *t = l->now;
  while (t) {
    // cout << t->data;
    printf("%d", t->data);
    if (t->back == nullptr) {
      printf("\\n");
    } else {
      printf(" ");
    }
    t = t->back;
  }
  // delete l;
  return 0;
}