fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. struct Node {
  5. int data;
  6. Node* next;
  7. Node* prev; //
  8. Node(int d = 0, Node* p = 0, Node* n = 0) : data(d), next(p), prev(n) {} //
  9. Node* insert_after(int value);
  10. Node* delete_();
  11. void display_list_after();
  12. void display_list_prev();
  13. };
  14.  
  15. Node* Node::insert_after(int value) {
  16. Node *p = new Node(value);
  17. Node *n = p; //
  18. p->next = next;
  19. p->prev = this; //
  20. next = p;
  21. return p;
  22. }
  23. Node* Node::delete_(){ //
  24. Node *p = this;
  25. Node *n = 0;
  26. if (prev != 0){ //
  27. prev->next = next; //
  28. n = prev; //
  29. }
  30.  
  31. if (next != 0) { //
  32. next = prev->prev; //
  33.  
  34. if (n == 0){ //
  35. n = next; //
  36. }
  37. }
  38. delete p;
  39. return n; //
  40. }
  41. void Node::display_list_after() {
  42. Node *head = this;
  43. while (head != 0) {
  44. cout << head->data << " ";
  45. head = head->next;
  46. }
  47. cout << '\n';
  48. }
  49.  
  50. void Node::display_list_prev() {
  51. Node *tail = this; //
  52. while (tail != 0) { //
  53. cout << tail->data << " "; //
  54. tail = tail->prev; //
  55. }
  56. cout << '\n'; //
  57.  
  58. }
  59. int main(){
  60. Node *head = new Node(10);
  61. Node *tail = NULL;
  62. Node *p = head->insert_after(20);
  63. p = p->insert_after(25);
  64. p = p->insert_after(30);
  65. p = p->insert_after(35);
  66. tail = p->insert_after(40);
  67. head->display_list_after();
  68. tail->display_list_prev(); //
  69. return 0;
  70. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
10 20 25 30 35 40 
40 35 30 25 20 10