遇到一个内存访问问题,但是不知道如何解决,请求帮助

#include
using namespace std;
class node{
public:
int data;
node *next;
};
class list{
public:
node *tail;
int length;
list();
void push_back(int n);
void print(int n,int m);
};

list::list()
{
this->tail=NULL;
this->length=0;
}

void list::push_back(int n)
{
node *newnode=new node();
newnode->data=n;
newnode->next=NULL;
if(tail==NULL)
{
tail=newnode;
tail->next=newnode;
length++;
}
else
{
newnode->next=tail->next;
tail->next=newnode;
tail=newnode;
length++;
}
}

void list::print(int n,int m)
{
int count=1;
node *tnode=NULL;
node *anode=tail->next;
while(anode!=NULL)
{
while(count<m-1)
{
anode=anode->next;
count++;
}
tnode=anode->next;
cout<data<<endl;
anode->next=tnode->next;
delete tnode;
tnode=NULL;
anode=anode->next;
count=1;
}
}

int main()
{
list l;
int m,n;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
l.push_back(i);
}
l.print(n,m);
}

img

你void list::push_back(int n)函数中,插入节点的逻辑错了,next的值永远不会等于NULL,而且永远只有两个节点,这两个节点还是首尾相连的。你插入节点的时候想往前插还是往后插?
你的print函数要实现什么功能?有显示也有删除节点。
push_back函数给你改了,用头插还是尾插都给你写了,print函数实在搞不懂你要干啥。


void list::push_back(int n)
{
    node * tt = tail; 
    node *newnode=new node();
    newnode->data=n;
    newnode->next=NULL;
    if(tail==NULL)
    {
        tail=newnode;
        //tail->next=newnode; //这一句删掉
        length++;
    }
    else
    {
        //这下面3句是头插法,后插入的在链表前面
        newnode->next=tail; 
        tail=newnode;
        length++;

        //这下面是尾插法,后插入的在链表的后面
        /*tt = tail;
        while(tt->next)
            tt = tt->next;
        tt->next = newnode;
        length++;
        */
    }
}