//منة الله محمود صالح زغلول
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node* prev;
Node(int val) {
data = val;
next = nullptr;
prev = nullptr;
}
};
class Doublee {
public:
Node* head;
Doublee() {
head = nullptr;
}
void add(int data) {
Node* newNode = new Node(data);
if (!head) {
head = newNode;
return;
}
Node* lastNode = head;
while (lastNode->next) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
newNode->prev = lastNode;
}
void printList() {
Node* temp = head;
while (temp) {
cout << temp->data << " <-> ";
temp = temp->next;
}
cout << "NULL" << endl;
}
void reverseList() {
Node* temp = nullptr;
Node* current = head;
while (current) {
temp = current->prev;
current->prev = current->next;
current->next = temp;
current = current->prev;
}
if (temp) {
head = temp->prev;
}
}
static Doublee merge(Doublee& list1, Doublee& list2) {
Doublee mergedList;
Node* current1 = list1.head;
Node* current2 = list2.head;
while (current1 && current2) {
if (current1->data < current2->data) {
mergedList.add(current1->data);
current1 = current1->next;
}
else {
mergedList.add(current2->data);
current2 = current2->next;
}
}
while (current1) {
mergedList.add(current1->data);
current1 = current1->next;
}
while (current2) {
mergedList.add(current2->data);
current2 = current2->next;
}
return mergedList;
}
};
int main() {
Doublee list1;
list1.add(1);
list1.add(3);
list1.add(5);
Doublee list2;
list2.add(2);
list2.add(4);
list2.add(6);
list1.printList();
list2.printList();
Doublee mergedList = Doublee::merge(list1, list2);
mergedList.printList();
mergedList.reverseList();
mergedList.printList();
return 0;
}