У вас две проблемы с вашим кодом.Во-первых, отсутствует {...}
, окружающий ваш оператор else
в insert()
.Чтобы необходимый код применялся только к случаю else
, вам необходимо заключить в скобки весь else
скобки, например:
else {
while (cur->link != NULL) {
cur = cur->link;
}
temp = new node;
temp->data = x;
temp->link = NULL;
cur->link = temp;
}
}
Во-вторых, ваше условное условиеиспользуется для display()
неверно.Вы хотите выводить содержимое только тогда, когда cur != NULL
, а не , когда cur->next != NULL
(поэтому вы попытались добавить дополнительный оператор вывода после окончания цикла, чтобы перехватить ваше последнее значение).Не делайте этого, если вы обнаружите, что пытаетесь сделать что-то подобное - вы, вероятно, делаете это неправильно.
С этим изменением у вас просто есть:
void display() {
cur = start;
while (cur != NULL) {
cout << "Value is: " << cur->data << endl;
cur = cur->link;
}
}
В целом, вы получите:
#include <iostream>
using namespace std;
class node{
public:
char data;
node *link;
};
class linklist{
private:
node *start, *temp, *cur;
public:
linklist() {
start = NULL;
}
void insert (char x) {
if (start == NULL) {
start = new node;
start->data = x;
start->link = NULL;
cur = start;
}
else {
while (cur->link != NULL) {
cur = cur->link;
}
temp = new node;
temp->data = x;
temp->link = NULL;
cur->link = temp;
}
}
void display() {
cur = start;
while (cur != NULL) {
cout << "Value is: " << cur->data << endl;
cur = cur->link;
}
}
};
int main (void) {
linklist obj;
obj.insert('e');
obj.insert('t');
obj.insert('r');
obj.insert('w');
obj.insert('l');
obj.display();
system("Pause");
}
Пример использования / Вывод
$ ./bin/llinsert
Value is: e
Value is: t
Value is: r
Value is: w
Value is: l
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.