Функция замены связанного списка с управлением заголовком, хвостом и размеромC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Функция замены связанного списка с управлением заголовком, хвостом и размером

Сообщение Anonymous »

Я работаю над классом SinglyLinkedList на C++, где я поддерживаю указатели как на начало, так и на конец списка, а также целочисленный размер для отслеживания числа узлов. Моя цель — реализовать функцию replace(int x), которая заменяет каждое вхождение значения x в связанном списке на число узлов x, каждый из которых содержит значение 1 >. Например, если связанный список — 4 -> 5 -> 3 -> 8 -> 5 и я вызываю replace(3), ожидаемый результат должен быть 4 -> 5 -> 1 - > 1 -> 1 -> 8 -> 5. Кроме того, если значение x не отображается в списке, список должен остаться неизменным.
Интерфейс:

Код: Выделить всё

struct SinglyLinkedList
{
Node* head, * tail;
int size;

SinglyLinkedList() :head(nullptr), tail(nullptr), size(0) {}; // Default constructor

void replace(int X);
};
Моя попытка:

Код: Выделить всё

void SinglyLinkedList::replace(int X)
{
Node dummyHead(0, head);
Node* curr = head, * prev = &dummyHead;
while (curr)
{
if (curr->value == X)
{
Node* nextNode = curr->next;
for (int i = 0; i < X; i++)
{
prev->next = new Node(1);
size++;
prev = prev->next;
}
if (curr == tail)
{
tail = prev;
}
prev->next = nextNode;
curr = nextNode;
}
else
{
prev = curr;
curr = curr->next;
}
}
head = dummyHead.next;
}
Основная идея моего подхода заключается в том, чтобы пройти по связанному списку, сохраняя при этом указатели на текущий узел (curr) и предыдущий узел (prev). Когда я нахожу узел, содержащий значение x, я заменяю его, вставляя x новых узлов, каждый со значением 1. Я использую фиктивный заголовок, чтобы упростить логику вставки, особенно при обработке крайних случаев, таких как замена заголовка списка. После вставки новых узлов я правильно соединяю оставшуюся часть списка и гарантирую, что размер обновится соответствующим образом.
Поскольку я работаю над более крупным заданием в своем курсе «Структуры данных и алгоритмы», которое включает тесты, мне удалось определить, что проблема заключается в этой функции. Могу ли я получить помощь в определении проблемы? Есть ли что-то очевидное, что не сработает? Возможно, я не во всех случаях правильно обновляю хвост?

Подробнее здесь: https://stackoverflow.com/questions/791 ... management
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»