Я создаю свой собственный класс связанных списков, и у меня возникают некоторые проблемы, связанные с тем, как писать некоторые функции, чтобы помочь мне пройти этот список. Это первый раз, когда я создал связанный список с нуля, поэтому, если мой подход нестандартен, пожалуйста, дайте мне знать, что может быть более условным.Доступ к элементу в моем классе связанного списка
Я хотел бы написать функцию в классе List, которая позволяет мне увеличиваться до следующего элемента getNext(), а также для getPrev();
Я написал GetNext так:
T* getNext(){return next;}
Однако он говорит мне следующий не объявлена в области. Я также хотел бы написать функцию, которая позволяет мне получить доступ и изменить объект в списке. Я рассматривал возможность использования оператора скобки, но сначала мне нужно написать функцию, чтобы вернуть элемент данных. Возможно, если я возьму такой же подход, как и в моих поп-функциях, подумайте об этом сейчас. Тем не менее, я все равно буду признателен за любые советы.
Вот мой класс List:
#ifndef LIST_H
#define LIST_H
//List Class
template <class T>
class List{
struct Node {
T data;
Node *next;
Node *prev;
//Constructs Node Element
Node(T t, Node* p, Node* n) { data = (t); prev = (p); next = (n); }
// T *getNext() {return next;}
};
Node *head;
Node *tail;
public:
//Constructor
List() { head = NULL; tail=NULL; }
//Destructor
~List() {
while(head){
Node * temp(head);
head = head->next;
delete temp;
}
}
//is empty
bool empty() const {return (!head || !tail); }
operator bool() const {return !empty(); }
//Push back
void push_back(T data) {
tail = new Node(data, tail, NULL);
if(tail->prev) //if the node in front of tail is initilized
tail->prev->next = tail;
if(empty())
head = tail;
}
//Push front
void push_front(T data) {
head = new Node(data, NULL, head);
if(head->next)//if the node following head is initilized
head->next->prev = head;
if(empty())
tail = head;
};
T pop_back() {
if(empty())
throw("Error in List: List is empty\n");
Node* temp(tail);
T data(tail->data);
tail = tail->prev;
if(tail)
tail->next = NULL;
else
head = NULL;
delete temp;
return data;
}
T pop_front() {
if (empty())
throw("Error in List: List is empty\n");
Node* temp(head);
T data(head->data);
head = head->next;
if(head)
head->prev=NULL;
else
tail = NULL;
delete temp;
return data;
}
T getNext(){return next;}
};
#endif
Первый аргумент логически логичен, и для его вызова из списка я попытался сделать что-то вроде этого: 'Node * getNext() {return Next(); } // внутри списка' И когда я пытаюсь сделать второй способ, он выводит, что «класс List не имеет члена с именем getNext()» –
TaylorTheDeveloper
, это, вероятно, потому, что вы говорите 'Next()' и у которого нет объекта, связанного с ним , Если вы заметили, что в моем втором подходе функция нуждается в аргументе. – pippin1289
Я попытался использовать второй метод, однако эта ошибка произошла, когда я устал компилировать: 'нет подходящей функции для вызова в âList :: getNext() â ' –
TaylorTheDeveloper