fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <typename T>
  5. class dll {
  6. private:
  7. struct Node {
  8. Node* prev;
  9. Node* next;
  10. T data;
  11. };
  12.  
  13. Node* head;
  14. Node* tail;
  15.  
  16. public:
  17. dll();
  18. ~dll();
  19.  
  20. void insert(T value);
  21.  
  22. bool empty() const { return head == tail; };
  23. };
  24.  
  25. template <typename T> dll<T>::dll() {
  26. head = nullptr;
  27. tail = head;
  28. }
  29.  
  30. template <typename T> dll<T>::~dll() {
  31. delete[] head;
  32. }
  33.  
  34. template <typename T> void dll<T>::insert(T value) {
  35. Node *node = new Node;
  36. std::cout << node << '\n';
  37. node->data = value;
  38. // Case 1: There are no nodes yet
  39. if (head == nullptr) {
  40. node->prev = nullptr;
  41. node->next = nullptr;
  42. head = node;
  43. tail = head;
  44. }
  45. else {
  46. // Case 2: There is more than one node
  47. Node *curr = head;
  48. if (curr->next != nullptr)
  49. {
  50. while (curr->next) {
  51. // If the value is less than the current value
  52. if (value < curr->data) {
  53. Node *temp = new Node;
  54. temp->data = curr->data;
  55. temp->next = curr->next;
  56. temp->prev = curr->prev;
  57. node->next = temp;
  58. node->prev = temp->prev;
  59. curr->prev = node;
  60. }
  61. curr = curr->next;
  62. }
  63. }
  64. // Case 3: There is only one node
  65. else {
  66. node->prev = head;
  67. node->next = nullptr;
  68. tail = node;
  69. }
  70. }
  71. }
  72.  
  73. int main() {
  74. dll<int> list;
  75. list.insert(10);
  76. list.insert(20);
  77. list.insert(15);
  78. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
0x8d9d008
0x8d9d018
0x8d9d028