fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template<typename T>
  5. class DoubleLinkedList
  6. {
  7. struct Node
  8. {
  9. T value;
  10. Node *prev;
  11. Node *next;
  12.  
  13. Node(T val, Node *next = nullptr, Node *prev = nullptr) :
  14. value(val), prev(prev), next(next) {}
  15. };
  16.  
  17. Node *head;
  18. Node *tail;
  19. public:
  20. DoubleLinkedList(Node *head = nullptr) : head(head) {
  21. if (head == nullptr) {
  22. tail = nullptr;
  23. return;
  24. }
  25. Node *tmp;
  26. for (tmp = head; tmp->next != nullptr; tmp = tmp->next);
  27. tail = tmp;
  28. }
  29.  
  30. void addfront(T val) {
  31. Node *newnode = new Node(val, head);
  32. if (head == nullptr) {
  33. head = tail = newnode;
  34. return;
  35. }
  36. newnode->next = head;
  37. head->prev = newnode;
  38. head = newnode;
  39. }
  40.  
  41. void addend(T val) {
  42. Node *newnode = new Node(val, nullptr, tail);
  43. if (head == nullptr) {
  44. head = tail = newnode;
  45. return;
  46. }
  47. tail->next = newnode;
  48. newnode->prev = tail;
  49. tail = newnode;
  50.  
  51. }
  52.  
  53. void del(T val) {
  54. for (Node *tmp = head; tmp != nullptr; tmp = tmp->next) {
  55. if (tmp->value == val) {
  56. if (tmp != head)
  57. tmp->prev->next = tmp->next;
  58. else
  59. head = tmp->next;
  60. if (tmp->next != nullptr)
  61. tmp->next->prev = tmp->prev;
  62. else
  63. tail = tmp->prev;
  64. // print();
  65. delete tmp;
  66. break;
  67. }
  68. }
  69. }
  70.  
  71. void print()
  72. {
  73. for (Node *tmp = head; tmp != nullptr; tmp = tmp->next)
  74. std::cout << tmp->value << ", ";
  75. std::cout << "\n";
  76. }
  77.  
  78. ~DoubleLinkedList() {
  79. Node *tmp, *next;
  80. for (tmp = head; tmp != nullptr; tmp = tmp->next) {
  81. next = tmp->next;
  82. delete tmp;
  83. }
  84. }
  85. };
  86.  
  87. int main()
  88. {
  89. DoubleLinkedList<int> numlist;
  90. for (int i = 0; i < 10; i++)
  91. numlist.addend(i);
  92. numlist.print();
  93. numlist.del(0);
  94. numlist.print();
  95. }
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
1, 2, 3, 4, 5, 6, 7, 8, 9,