Member 13465730 Ответов: 1

Привет, я не могу вставить узел спереди в связанный список. С++. У меня есть код, можешь посмотреть?


класс типа {

общественный:
NodeType(int = 0); / / конструктор со значением по умолчанию для
// информационное поле
int info; / / данные
NodeType * nextPtr; / / указатель на следующий узел в списке
};

// Конструктор
Типа::типа(данных int )
{
информация = данные;
nextPtr = 0;
}

// Вопрос 4-Функция Вставки
void insert(int value, NodeType *head) {


Типа *currentPtr = нового типа;

currentPtr- & gt;info = значение;
if (head = = NULL) {
currentPtr- & gt;nextPtr = head;
head = currentPtr;
}
currentPtr - > nextPtr = temp;
temp = currentPtr;

}

Что я уже пробовал:

тап_п() {

Типа *currentPtr = нового типа;
NodeType *head = NULL;

int value=0;



выбор char;

в то время как (правда) {
cout << " что бы вы хотели сделать: "<< " \n";
соиь <&ЛТ; "1. Вставить" &ЛТ;&ЛТ; "\Н";

cin > & gt; выбор;

переключатель (выбор)
{
случай "1":
cout << "пожалуйста, введите значение-целое число"< & lt; "\n";
Cin> & gt; значение;
вставка (значение, головка);
перерыв;
}

Richard MacCutchan

Проблема в том, что ваш класс Node ссылается на элементы, которые находятся в переменных основного метода и, следовательно, находятся вне его контроля. Поэтому, если основной метод изменит указатель головы, все ваши узлы будут потеряны. Ваш тип узла должен содержать прямые и обратные ссылки, но именно основной код должен устанавливать их при добавлении и удалении узлов.

1 Ответов

Рейтинг:
0

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но к более ранним стадиям вы придете позже): тестирование и отладка.

Начните с рассмотрения того, что он делает и чем это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его-он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить почему. Поставить точку останова на строке:
myaverage.DisplayAverage();

и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он совершенствуется только при использовании!

Но я дам вам подсказку: какое значение имеет head удерживать, когда вы добавляете к нему узел?