#include <iostream>
#include <string>
using namespace std;
struct ListNode {
int val;
ListNode* prev;
ListNode* next;
ListNode(int x) : val(x), prev(nullptr), next(nullptr) {}
};
// Function to Insert a new node at the tail of the list
void insertAtTail(ListNode*& head, int val) {
ListNode* newNode = new ListNode(val);
if (head == nullptr) {
head = newNode;
} else {
ListNode* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = newNode;
newNode->prev = temp;
}
}
// Serialization
string serialize(ListNode* head) {
string serializedData;
ListNode* curr = head;
while (curr != nullptr) {
serializedData += to_string(curr->val) + ",";
curr = curr->next;
}
return serializedData;
}
// Deserialization
ListNode* deserialize(string data) {
ListNode* head = nullptr;
string numStr = "";
int dataSize = data.size();
int i = 0;
while (i < dataSize) {
numStr = "";
while (i < dataSize && data[i] != ',') {
numStr += data[i];
i++;
}
if (i < dataSize) {
i++;
}
int val = stoi(numStr);
insertAtTail(head, val);
}
return head;
}
// Printing the doubly linked list
void printList(ListNode* head) {
ListNode* curr = head;
while (curr != nullptr) {
cout << curr->val << " ";
curr = curr->next;
}
cout << endl;
}
int main() {
string str="1,20,35,4,51,82,90,100";
ListNode* head = deserialize(str);
cout<<"String to deserialise: "<<str<<endl;
cout << "Deserialized list: ";
printList(head);
cout<<"Serialising the same deserialised list.... "<<endl;
string serializedData = serialize(head);
cout << "Serialized data: " << serializedData << endl;
// Deleting heap memory used
ListNode* curr = head;
while (curr != nullptr) {
ListNode* temp = curr;
curr = curr->next;
delete temp;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBMaXN0Tm9kZSB7CiAgICBpbnQgdmFsOwogICAgTGlzdE5vZGUqIHByZXY7CiAgICBMaXN0Tm9kZSogbmV4dDsKICAgIExpc3ROb2RlKGludCB4KSA6IHZhbCh4KSwgcHJldihudWxscHRyKSwgbmV4dChudWxscHRyKSB7fQp9OwoKLy8gRnVuY3Rpb24gdG8gSW5zZXJ0IGEgbmV3IG5vZGUgYXQgdGhlIHRhaWwgb2YgdGhlIGxpc3QKdm9pZCBpbnNlcnRBdFRhaWwoTGlzdE5vZGUqJiBoZWFkLCBpbnQgdmFsKSB7CiAgICBMaXN0Tm9kZSogbmV3Tm9kZSA9IG5ldyBMaXN0Tm9kZSh2YWwpOwogICAgaWYgKGhlYWQgPT0gbnVsbHB0cikgewogICAgICAgIGhlYWQgPSBuZXdOb2RlOwogICAgfSBlbHNlIHsKICAgICAgICBMaXN0Tm9kZSogdGVtcCA9IGhlYWQ7CiAgICAgICAgd2hpbGUgKHRlbXAtPm5leHQgIT0gbnVsbHB0cikgewogICAgICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgICAgICB9CiAgICAgICAgdGVtcC0+bmV4dCA9IG5ld05vZGU7CiAgICAgICAgbmV3Tm9kZS0+cHJldiA9IHRlbXA7CiAgICB9Cn0KCi8vIFNlcmlhbGl6YXRpb24Kc3RyaW5nIHNlcmlhbGl6ZShMaXN0Tm9kZSogaGVhZCkgewogICAgc3RyaW5nIHNlcmlhbGl6ZWREYXRhOwogICAgTGlzdE5vZGUqIGN1cnIgPSBoZWFkOwogICAgd2hpbGUgKGN1cnIgIT0gbnVsbHB0cikgewogICAgICAgIHNlcmlhbGl6ZWREYXRhICs9IHRvX3N0cmluZyhjdXJyLT52YWwpICsgIiwiOwogICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgfQogICAgcmV0dXJuIHNlcmlhbGl6ZWREYXRhOwp9CgovLyBEZXNlcmlhbGl6YXRpb24KTGlzdE5vZGUqIGRlc2VyaWFsaXplKHN0cmluZyBkYXRhKSB7CiAgICBMaXN0Tm9kZSogaGVhZCA9IG51bGxwdHI7CiAgICBzdHJpbmcgbnVtU3RyID0gIiI7CiAgICBpbnQgZGF0YVNpemUgPSBkYXRhLnNpemUoKTsKICAgIGludCBpID0gMDsKICAgIHdoaWxlIChpIDwgZGF0YVNpemUpIHsKICAgICAgICBudW1TdHIgPSAiIjsKICAgICAgICB3aGlsZSAoaSA8IGRhdGFTaXplICYmIGRhdGFbaV0gIT0gJywnKSB7CiAgICAgICAgICAgIG51bVN0ciArPSBkYXRhW2ldOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICAgIGlmIChpIDwgZGF0YVNpemUpIHsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICBpbnQgdmFsID0gc3RvaShudW1TdHIpOwogICAgICAgIGluc2VydEF0VGFpbChoZWFkLCB2YWwpOwogICAgfQogICAgcmV0dXJuIGhlYWQ7Cn0KCi8vIFByaW50aW5nIHRoZSBkb3VibHkgbGlua2VkIGxpc3QKdm9pZCBwcmludExpc3QoTGlzdE5vZGUqIGhlYWQpIHsKICAgIExpc3ROb2RlKiBjdXJyID0gaGVhZDsKICAgIHdoaWxlIChjdXJyICE9IG51bGxwdHIpIHsKICAgICAgICBjb3V0IDw8IGN1cnItPnZhbCA8PCAiICI7CiAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIHN0cj0iMSwyMCwzNSw0LDUxLDgyLDkwLDEwMCI7CiAgICBMaXN0Tm9kZSogaGVhZCA9IGRlc2VyaWFsaXplKHN0cik7CiAgICBjb3V0PDwiU3RyaW5nIHRvIGRlc2VyaWFsaXNlOiAiPDxzdHI8PGVuZGw7CiAgICBjb3V0IDw8ICJEZXNlcmlhbGl6ZWQgbGlzdDogIjsKICAgIHByaW50TGlzdChoZWFkKTsKICAgIGNvdXQ8PCJTZXJpYWxpc2luZyB0aGUgc2FtZSBkZXNlcmlhbGlzZWQgbGlzdC4uLi4gIjw8ZW5kbDsKICAgIHN0cmluZyBzZXJpYWxpemVkRGF0YSA9IHNlcmlhbGl6ZShoZWFkKTsKICAgIGNvdXQgPDwgIlNlcmlhbGl6ZWQgZGF0YTogIiA8PCBzZXJpYWxpemVkRGF0YSA8PCBlbmRsOwoKICAgIC8vIERlbGV0aW5nIGhlYXAgbWVtb3J5IHVzZWQKICAgIExpc3ROb2RlKiBjdXJyID0gaGVhZDsKICAgIHdoaWxlIChjdXJyICE9IG51bGxwdHIpIHsKICAgICAgICBMaXN0Tm9kZSogdGVtcCA9IGN1cnI7CiAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAgICAgICAgZGVsZXRlIHRlbXA7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K
String to deserialise: 1,20,35,4,51,82,90,100
Deserialized list: 1 20 35 4 51 82 90 100
Serialising the same deserialised list....
Serialized data: 1,20,35,4,51,82,90,100,