fork(1) download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Node
  6. {
  7. public :
  8. int element;
  9. Node* next_node;
  10. };
  11.  
  12. class List
  13. {
  14. public:
  15. List()
  16. {
  17. first_node = NULL;
  18. size = 0;
  19. }
  20. Node* get_first()
  21. {
  22. return first_node;
  23. }
  24. bool isempty() const
  25. {
  26. return (size == 0);
  27. }
  28. void push_front(int _element)
  29. {
  30. Node* new_p = new Node; //建立一個新節點
  31. new_p->element = _element; //把新內容丟到新節點
  32. new_p->next_node = first_node; //把新節點的'下一個節點'設為原本的第一個節點
  33. first_node = new_p; //將指向第一節點的指標指向新節點
  34. size++;
  35. }
  36. void insert_at(int index, int _element)
  37. {
  38. if (index == 0)
  39. push_front(_element);
  40. else
  41. {
  42. Node* front_node = first_node;
  43. for (int i = 1; i < index; i++)
  44. front_node = front_node->next_node;
  45. push(front_node, _element);
  46. }
  47. }
  48. void printOut() const
  49. {
  50. Node* p = first_node;
  51. while (p != NULL)
  52. {
  53. cout << p->element << " -> ";
  54. p = p->next_node;
  55. }
  56. cout << "NULL" << endl << "size = " << size << endl;
  57. }
  58. int get_size()
  59. {
  60. return size;
  61. }
  62. protected:
  63. Node* first_node;
  64. int size;
  65. void push(Node* front_node,int _element)
  66. {
  67. Node* new_p = new Node;
  68. new_p->element = _element;
  69. new_p->next_node = front_node->next_node;
  70. front_node->next_node = new_p;
  71. size++;
  72. }
  73. };
  74.  
  75. int main()
  76. {
  77. List myList;
  78. myList.push_front(23);
  79. myList.push_front(24);
  80. myList.push_front(25);
  81. myList.push_front(27);
  82. myList.push_front(2);
  83. myList.push_front(32);
  84. myList.printOut();
  85. myList.insert_at(4, 89);
  86. myList.printOut();
  87.  
  88.  
  89. Node* dn = myList.get_first(); //node to be deleted
  90. Node* ndn = dn->next_node; //next node to be deleted
  91. for (int i = 0; i < myList.get_size(); i++)
  92. {
  93. delete dn;
  94. Node* dn = ndn;
  95. ndn = dn->next_node;
  96. }
  97.  
  98. return 0;
  99. }
Runtime error #stdin #stdout #stderr 0s 4348KB
stdin
Standard input is empty
stdout
32 -> 2 -> 27 -> 25 -> 24 -> 23 -> NULL
size = 6
32 -> 2 -> 27 -> 25 -> 89 -> 24 -> 23 -> NULL
size = 7
stderr
free(): double free detected in tcache 2