fork download
  1. //منة الله محمود صالح زغلول
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. class Node {
  6. public:
  7. int data;
  8. Node* next;
  9. Node* prev;
  10.  
  11. Node(int val) {
  12. data = val;
  13. next = nullptr;
  14. prev = nullptr;
  15. }
  16. };
  17.  
  18. class Doublee {
  19. public:
  20. Node* head;
  21.  
  22. Doublee() {
  23. head = nullptr;
  24. }
  25.  
  26. void add(int data) {
  27. Node* newNode = new Node(data);
  28. if (!head) {
  29. head = newNode;
  30. return;
  31. }
  32. Node* lastNode = head;
  33. while (lastNode->next) {
  34. lastNode = lastNode->next;
  35. }
  36. lastNode->next = newNode;
  37. newNode->prev = lastNode;
  38. }
  39.  
  40. void printList() {
  41. Node* temp = head;
  42. while (temp) {
  43. cout << temp->data << " <-> ";
  44. temp = temp->next;
  45. }
  46. cout << "NULL" << endl;
  47. }
  48.  
  49. void reverseList() {
  50. Node* temp = nullptr;
  51. Node* current = head;
  52.  
  53. while (current) {
  54. temp = current->prev;
  55. current->prev = current->next;
  56. current->next = temp;
  57. current = current->prev;
  58. }
  59.  
  60. if (temp) {
  61. head = temp->prev;
  62. }
  63. }
  64.  
  65. static Doublee merge(Doublee& list1, Doublee& list2) {
  66. Doublee mergedList;
  67. Node* current1 = list1.head;
  68. Node* current2 = list2.head;
  69.  
  70. while (current1 && current2) {
  71. if (current1->data < current2->data) {
  72. mergedList.add(current1->data);
  73. current1 = current1->next;
  74. }
  75. else {
  76. mergedList.add(current2->data);
  77. current2 = current2->next;
  78. }
  79. }
  80.  
  81. while (current1) {
  82. mergedList.add(current1->data);
  83. current1 = current1->next;
  84. }
  85.  
  86. while (current2) {
  87. mergedList.add(current2->data);
  88. current2 = current2->next;
  89. }
  90.  
  91. return mergedList;
  92. }
  93. };
  94.  
  95. int main() {
  96. Doublee list1;
  97. list1.add(1);
  98. list1.add(3);
  99. list1.add(5);
  100.  
  101. Doublee list2;
  102. list2.add(2);
  103. list2.add(4);
  104. list2.add(6);
  105. list1.printList();
  106. list2.printList();
  107.  
  108. Doublee mergedList = Doublee::merge(list1, list2);
  109. mergedList.printList();
  110. mergedList.reverseList();
  111. mergedList.printList();
  112.  
  113. return 0;
  114. }
  115.  
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
1 <-> 3 <-> 5 <-> NULL
2 <-> 4 <-> 6 <-> NULL
1 <-> 2 <-> 3 <-> 4 <-> 5 <-> 6 <-> NULL
6 <-> 5 <-> 4 <-> 3 <-> 2 <-> 1 <-> NULL