Для класса списка я пытаюсь создать метод для добавления узла в связанный список в начале списка, такой как void List::prepend(const Item& it)
а также один, чтобы вставить элемент по определенному индексу в списке: void List::insert(const Item& it, int index)
Таким образом, я мог бы использовать некоторую помощь в начале каждого из них.
Я уже создал метод, который добавляет в конец списка:
void List::append(const Item& it) {
Node *nodePtr = new Node(it, NULL);
if(mySize == 0)
{
myFirst = nodePtr;
}
else
{
myLast->myNext = nodePtr;
}
myLast = nodePtr;
mySize++;
}
Но эти два других идут не так хорошо.
Если вам интересно, у меня есть здесь typedef:
typedef double Item;
void List::prepend(const Item& it) {
Node *nodePtr = new Node(it, NULL);
if(mySize == 0)
{
//..
}
else
{
//..
}
++mySize;
}
void List::insert(const Item& it, int index) {
Node *nodePtr = new Node(it, NULL);
if(index == 0)
{
//..
}
Node *currentNode = myFirst;
int currentIndex = 0;
while(currentIndex < index - 1) {
//..
}
// insert before
// ..
++mySize;
}
Заполните области // .. самостоятельно.
Кажется, это ваша функция (List :: append (const Item& это)) есть небольшая ошибка, что вы еще не обновили последний указатель на NULL.
проблема в том, что вы сохраняете только последний элемент.
Вы должны сохранить первый элемент в myFirst.
Answer these questions:
1. What happen if mySize = 1 ?
2. Where does nodePtr point next? ( nodePtr->next)
На ваш вопрос:
void List::prepend(const Item& it) {
Node *nodePtr = new Node(it, NULL);
if(mySize == 0)
{
myFirst = nodePtr;
}
else{
nodePtr->next = myFirst;
myFirst = nodePtr;
}
mySize++;
}