#include <iostream>
using namespace std;
struct DoublyLinkedListNode {
int data;
DoublyLinkedListNode* next;
DoublyLinkedListNode* prev;
DoublyLinkedListNode(int val) {
data = val;
next = nullptr;
prev = nullptr;
}
};
DoublyLinkedListNode* sortedInsert(DoublyLinkedListNode* head, int data) {
DoublyLinkedListNode* newNode = new DoublyLinkedListNode(data);
if (!head || data < head->data) {
newNode->next = head;
if (head) head->prev = newNode;
return newNode;
}
DoublyLinkedListNode* current = head;
while (current->next && current->next->data < data) {
current = current->next;
}
newNode->next = current->next;
if (current->next) current->next->prev = newNode;
current->next = newNode;
newNode->prev = current;
return head;
}
void printList(DoublyLinkedListNode* head) {
while (head) {
cout << head->data << " ";
head = head->next;
}
cout << endl;
}
int main() {
DoublyLinkedListNode* head = nullptr;
head = sortedInsert(head, 10);
head = sortedInsert(head, 30);
head = sortedInsert(head, 20);
head = sortedInsert(head, 5);
printList(head);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IERvdWJseUxpbmtlZExpc3ROb2RlIHsKICAgIGludCBkYXRhOwogICAgRG91Ymx5TGlua2VkTGlzdE5vZGUqIG5leHQ7CiAgICBEb3VibHlMaW5rZWRMaXN0Tm9kZSogcHJldjsKCiAgICBEb3VibHlMaW5rZWRMaXN0Tm9kZShpbnQgdmFsKSB7CiAgICAgICAgZGF0YSA9IHZhbDsKICAgICAgICBuZXh0ID0gbnVsbHB0cjsKICAgICAgICBwcmV2ID0gbnVsbHB0cjsKICAgIH0KfTsKCkRvdWJseUxpbmtlZExpc3ROb2RlKiBzb3J0ZWRJbnNlcnQoRG91Ymx5TGlua2VkTGlzdE5vZGUqIGhlYWQsIGludCBkYXRhKSB7CiAgICBEb3VibHlMaW5rZWRMaXN0Tm9kZSogbmV3Tm9kZSA9IG5ldyBEb3VibHlMaW5rZWRMaXN0Tm9kZShkYXRhKTsKCiAgICBpZiAoIWhlYWQgfHwgZGF0YSA8IGhlYWQtPmRhdGEpIHsKICAgICAgICBuZXdOb2RlLT5uZXh0ID0gaGVhZDsKICAgICAgICBpZiAoaGVhZCkgaGVhZC0+cHJldiA9IG5ld05vZGU7CiAgICAgICAgcmV0dXJuIG5ld05vZGU7CiAgICB9CgogICAgRG91Ymx5TGlua2VkTGlzdE5vZGUqIGN1cnJlbnQgPSBoZWFkOwogICAgd2hpbGUgKGN1cnJlbnQtPm5leHQgJiYgY3VycmVudC0+bmV4dC0+ZGF0YSA8IGRhdGEpIHsKICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dDsKICAgIH0KCiAgICBuZXdOb2RlLT5uZXh0ID0gY3VycmVudC0+bmV4dDsKICAgIGlmIChjdXJyZW50LT5uZXh0KSBjdXJyZW50LT5uZXh0LT5wcmV2ID0gbmV3Tm9kZTsKICAgIGN1cnJlbnQtPm5leHQgPSBuZXdOb2RlOwogICAgbmV3Tm9kZS0+cHJldiA9IGN1cnJlbnQ7CgogICAgcmV0dXJuIGhlYWQ7Cn0KCnZvaWQgcHJpbnRMaXN0KERvdWJseUxpbmtlZExpc3ROb2RlKiBoZWFkKSB7CiAgICB3aGlsZSAoaGVhZCkgewogICAgICAgIGNvdXQgPDwgaGVhZC0+ZGF0YSA8PCAiICI7CiAgICAgICAgaGVhZCA9IGhlYWQtPm5leHQ7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogICAgRG91Ymx5TGlua2VkTGlzdE5vZGUqIGhlYWQgPSBudWxscHRyOwoKICAgIGhlYWQgPSBzb3J0ZWRJbnNlcnQoaGVhZCwgMTApOwogICAgaGVhZCA9IHNvcnRlZEluc2VydChoZWFkLCAzMCk7CiAgICBoZWFkID0gc29ydGVkSW5zZXJ0KGhlYWQsIDIwKTsKICAgIGhlYWQgPSBzb3J0ZWRJbnNlcnQoaGVhZCwgNSk7CgogICAgcHJpbnRMaXN0KGhlYWQpOyAKCiAgICByZXR1cm4gMDsKfQo=