#c #linked-list
#c #связанный список
Вопрос:
Это то, что мне нужно сделать: append_data добавляет узел в конец списка, на который указывает top. результирующий список на один элемент длиннее, а вновь добавленный узел имеет заданное значение данных. рассмотрите возможность использования функции ‘append’, чтобы помочь. аннулировать AppendData (данные int);
append — это то же самое, что и append_data , за исключением того, что мы добавляем узел, а не значение. недействительное добавление (shared_ptr new_node); Я смог добавить данные, используя этот код, но в идеальном мире я мог бы передать Append через AppendData и получить тот же результат. Я борюсь с Append прямо сейчас, хотя ответ находится в коде AppendData
»’
void LinkedList::AppendData(int data){
shared_ptr<node> temp(new node);
temp->data = data;
temp->next = shared_ptr<node>(NULL);
shared_ptr<node> end_node(top_ptr_);
if(end_node == NULL) {
end_node=temp;
} else {
while(end_node->next!=NULL) {
end_node=end_node->next;
}
end_node->next=temp;
}
}
void LinkedList::Append(shared_ptr<node> new_node){}
»’
Комментарии:
1. Вы уверены, что ваш
AppendData()
код работает?end_node = temp;
в частности, выглядит подозрительно.2. Если
Append
можно было бы использовать, просто сохраните первые 3 строки и напишите:Append(temp)
. Если не удалось, вам лучше опубликовать содержимоеAppend
.
Ответ №1:
в идеальном мире я мог бы передать Append через AppendData и получить тот же результат.
На самом деле, Append
содержит меньше информации, чем AppendData
, в частности, сами данные. Было бы разумнее реорганизовать его таким образом, чтобы AppendData
создать узел, а затем вызвать Append
добавление этого узла в список:
void LinkedList::AppendData(int data){
// construct node
shared_ptr<node> temp(new node);
temp->data = data;
temp->next = shared_ptr<node>(NULL);
// append it
Append(temp);
}
void LinkedList::Append(shared_ptr<node> new_node){
shared_ptr<node> end_node(top_ptr_);
if(end_node == NULL) {
end_node = new_node; // new_node instead of temp
} else {
while(end_node->next!=NULL) {
end_node=end_node->next;
}
end_node->next = new_node; // ditto
}
}
Кроме того, эта строка end_node = new_node;
неверна. Если список пуст, вам нужно обновить top_ptr_
следующим образом:
top_ptr_ = new_node;