Исправлен оператор << ().
Однако я не проверял это, потому что List :: add () не указан в вопросе. </p>
std::ostream & operator <<(std::ostream& out, const List & ll) {
List::Node* node = ll.head;
if (!node)
{
out << "List is empty!" << std::endl;
return out;
}
out << node->value;
node = node->next;
while (node)
{
out << ", " << node->value;
node = node->next;
}
return out;
}
Я также рекомендую изменить определение узла следующим образом:
struct Node{
int value;
Node *next;
Node(int data)
: value{data}
, next{nullptr}
{}
};
Добавление одного списка к другому - оператор more + = 'ish
List& operator+=(const List &mergeList){
Node *n = mergeList.head;
while (n)
{
add(n->value);
n = n->next;
}
return *this;
}
void add(int);
Ну, я редко пишу операторы ввода, но я попробую:
std::istream& operator>>(std::istream& in, List& ll)
{
auto f = in.setf(std::ios::skipws);
int i;
in >> i;
ll.add(i);
while (in.good() && !in.eof())
{
int c = in.peek();
while (c == ' ' || c == ',')
{
in.get();
c = in.peek();
}
if (c == '\n')
{
break;
}
in >> i;
ll.add(i);
}
in.flags(f);
return in;
}