Я просмотрел форумы, но, похоже, не могу найти ответ на этот очень общий вопрос. Класс, приведенный ниже, представляет собой простой односвязный список со стандартным способом pushBack.
class linkedList {
private:
typedef struct node {
int data;
struct node *next;
node(int d):data(d), next(NULL){}
}*nodePtr;
nodePtr head, temp, curr;
public:
linkedList():head(NULL), temp(NULL), curr(NULL){}
void pushBack(int d) {
temp = new node(d);
curr = head;
if (curr != NULL) {
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = temp;
} else head = temp;
}
void printAll() {
curr = head;
cout << "list:" << endl;
while (curr) {
cout << curr->data << " ";
curr = curr->next;
}
cout << endl;
}
};
но почему моя функция pushBack не может быть написана так?
void pushBack(int d) {
temp = new node(d);
curr = head;
while (curr != NULL) {
curr = curr->next;
}
curr = temp;
}
Он должен перебирать список до появления curr == NULL, а затем устанавливать curr = temp. Если список пуст, то он не входит в цикл, и заголовок будет установлен на новый узел, если для параметра temp задано значение curr (для которого self задано значение head).
Логика имеет для меня смысл, поэтому я, должно быть, упускаю что-то еще.
Спасибо за помощь!