n istream & operator >> (istream & in, list
& l) {
n node * current = l.tail;
n if
(!current) { //empty list starting
out
n l.head = current = new node;
n in >>l.head->obj;
n l.tail = l.ptr = l.head;
n l.head->next = NULL;
n }
n
n node * savelist = l.tail->next;
n char next_char;
n while
((next_char = in.peek()) != ‘\n’ &&
n next_char != EOF) {
n
current->next = new node;
n
current = current->next;
n
in >>current->obj;
//what does this do?
n }
n current->next
= savelist; ptr = current;
n if
(!savelist) l.tail = current;
n return
in;
n }
n