fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class Node {
  5. public:
  6. int data;
  7. Node *next;
  8.  
  9. Node(int data) : data(data), next(NULL) {}
  10. };
  11.  
  12. class LinkedList {
  13. private:
  14. Node *head, *tail;
  15.  
  16. public:
  17. LinkedList() : head(NULL), tail(NULL) {}
  18.  
  19. // disabling these just for demonstration purposes,
  20. // but you really should implement them properly...
  21. LinkedList(const LinkedList&) = delete;
  22. LinkedList& operator=(const LinkedList&) = delete;
  23. //
  24.  
  25. ~LinkedList() {
  26. Node *p = head, *n;
  27. while (p) {
  28. n = p->next;
  29. delete p;
  30. p = n;
  31. }
  32. }
  33.  
  34. Node* add(int data) {
  35. Node *newNode = new Node(data);
  36. if (!head) {
  37. head = newNode;
  38. }
  39. if (tail) {
  40. tail->next = newNode;
  41. }
  42. tail = newNode;
  43. return newNode;
  44. }
  45.  
  46. void print() const {
  47. Node *p = head;
  48. while (p) {
  49. cout << p->data << ' ';
  50. p = p->next;
  51. }
  52. cout << endl;
  53. }
  54.  
  55. void deleteAlternateNodes() {
  56. Node *p = head, *q;
  57. while ((p != NULL) && (p->next != NULL)) {
  58. q = p->next;
  59. p->next = q->next;
  60. if (tail == q) tail = p;
  61. delete q;
  62. p = p->next;
  63. }
  64. }
  65. };
  66.  
  67. int main() {
  68. LinkedList ll;
  69.  
  70. int data;
  71. while ((cin >> data) && (data != -1)) {
  72. ll.add(data);
  73. }
  74.  
  75. ll.print();
  76. ll.deleteAlternateNodes();
  77. ll.print();
  78.  
  79. return 0;
  80. }
Success #stdin #stdout 0.01s 5660KB
stdin
1 2 3 4 5 -1
stdout
1 2 3 4 5 
1 3 5