Я пишу программу на c ++, которая реализует двусвязный список, который содержит один символ в каждом узле. Я вставляю символы через функцию добавления:
doubly_linked_list adam;
adam.append('a');
Эта функция реализована следующим образом:
//Append node
node* append(const item c){
//If the list is not empty...
if(length){
//maintain pointers to end nodes
node* old_last_node = last;
node* new_last_node = new node;
//re-assign the double link and exit link
old_last_node->next = new_last_node;
new_last_node->back = old_last_node;
new_last_node->next = NULL;
//re-assign the last pointer
last = new_last_node;
}
//If this is the first node
else{
//assign first and last to the new node
last = first = new node;
//assign nulls to the pointers on new node
first->next = first->back = NULL;
}
//increase length and exit
++length;
return last;
}
Однако я думаю, что есть проблема, возможно, с тем, как C ++ обрабатывает символы. Когда я иду напечатать свой список, мне почему-то не удается напечатать символы, которые я добавил в свой список. Вот что я использую для печати:
//Friendly output function
friend std::ostream& operator << (std::ostream& out_s, const doubly_linked_list& source_list){
//create iteration node pointer
node* traverse_position = source_list.first;
//iterate through, reading from start
for(int i = 1; i <= source_list.length; ++i){
//print the character
out_s << (traverse_position->data);
traverse_position = traverse_position->next;
}
//return the output stream
return out_s;
}
Я просто получаю дерьмо, когда печатаю это. Он печатает символы, которые я никогда не добавлял в свой список - вы знаете, только символы из какого-то места в памяти. Что может быть причиной этого?