Untitled
plain_text
13 days ago
3.1 kB
0
Indexable
Never
#include <iostream> #include <string> using namespace std; // Node structure for the double-linked list struct Node { string data; Node* prev; Node* next; }; // Function to create a new node Node* createNode(string data) { Node* newNode = new Node(); newNode->data = data; newNode->prev = NULL; newNode->next = NULL; return newNode; } // Function to insert a node at the end of the list void insertNode(Node** head, string data) { Node* newNode = createNode(data); if (*head == NULL) { *head = newNode; } else { Node* temp = *head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; newNode->prev = temp; } } // Function to display the list void displayList(Node* head) { Node* temp = head; while (temp != NULL) { cout << "Address: " << temp << endl; cout << "Information Part: " << temp->data << endl; cout << "Address Part: " << temp->next << endl; cout << endl; temp = temp->next; } } Node* rewriteList(Node* head) { Node* temp = head; Node* uppercaseHead = nullptr; Node* uppercaseTail = nullptr; bool foundSecondUppercase = false; // First loop: Write all uppercase letters while (temp != nullptr) { if (isupper(temp->data[0])) { Node* newNode = createNode(temp->data); if (uppercaseHead == nullptr) { uppercaseHead = newNode; uppercaseTail = newNode; } else { uppercaseTail->next = newNode; newNode->prev = uppercaseTail; uppercaseTail = newNode; } } temp = temp->next; } temp = head; // Second loop: Delete first element and write nodes before the second uppercase letter while (temp != nullptr) { if (isupper(temp->data[0])) { if (foundSecondUppercase) { break; } foundSecondUppercase = true; Node* nextNode = temp->next; delete temp; temp = nextNode; continue; } Node* newNode = createNode(temp->data); newNode->prev = uppercaseTail; uppercaseTail->next = newNode; uppercaseTail = newNode; temp = temp->next; } return uppercaseHead; } int main() { Node* listHead = NULL; // Enter names letter by letter string input; cout << "Enter your surname, first name, and patronymic letter by letter (separated by spaces):" << endl; cout << "Type 'done' to finish entering names." << endl; while (true) { cin >> input; if (input == "done") { break; } insertNode(&listHead, input); } cout << endl << "Original List:" << endl; displayList(listHead); cout << endl << "Converted List:" << endl; Node* newHead = rewriteList(listHead); displayList(newHead); return 0; }