#include <algorithm>
#include <iostream>

class foo{
public:
    int data;
    foo *next;
};

int main(int argc, char *argv[]){
    foo *head=NULL;
    foo *last=NULL;
    foo *current;
    int i;
    foo m;
    m.next=&m;
    foo *tmp;
    std::cin>>i;
    while (i--) {
        char *nonZero = new char[sizeof(*current)];
        std::fill(nonZero, nonZero + sizeof(*current), 6);

        current=new(nonZero) foo;
        current->data=i;
        if (last==NULL && head==NULL){
            last=current;
            head=current;
        } else {
            last->next=current;
            last=current;
        }
        std::cout << last->next << "\t";
    }// вот тут last-> next, я убрал везде NULL, где можно и где нельзя. откуда они тут? 

    tmp=head;
    while (tmp) {
        std::cout << tmp->data;
        tmp=tmp->next;
    }

    return 0;
}