Развернуть односвязный линейный список за один проход. (Без создания дополнительного списка)
Язык c++
*учесть что список может оказаться пустым
Нужно написать функции создания/добавление элемента списка; разворачивания списка; печать списка.
Пусть список состоит из букв

23 Мая 2020 в 19:42
167 +1
0
Ответы
1
include

struct Node {
char data;
Node* next;
};

Node createNode(char data) {
Node newNode = new Node;
newNode->data = data;
newNode->next = nullptr;
return newNode;
}

void addNode(Node& head, char data) {
if (head == nullptr) {
head = createNode(data);
} else {
Node current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = createNode(data);
}
}

void printList(Node head) {
Node current = head;
while (current != nullptr) {
std::cout << current->data << " ";
current = current->next;
}
std::cout << std::endl;
}

void reverseList(Node& head) {
Node prev = nullptr;
Node current = head;
Node next = nullptr;

while (current != nullptr) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;

}

int main() {
Node* list = nullptr;

// Добавление элементов в список
addNode(list, 'a');
addNode(list, 'b');
addNode(list, 'c');
addNode(list, 'd');
std::cout << "Исходный список: ";
printList(list);
// Разворачивание списка
reverseList(list);
std::cout << "Развёрнутый список: ";
printList(list);
return 0;

}

18 Апр 2024 в 11:45
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир