云丷
2021-10-14 09:31
采纳率: 0%
浏览 15

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

#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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • qfl_sdu 2021-10-14 09:49

    你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++;
            */
        }
    }
    
    
    打赏 评论

相关推荐 更多相似问题