回 帖 发 新 帖 刷新版面

主题:高手帮我看看这程序错在哪里,运行时显示访问地址冲突


自己编了一个简单的链表,编译没有错误,但是运行时提示访问地址冲突。 但自己检查不出哪里错了。

#include<iostream>
using namespace std;
class lizi
{
public:
    lizi():its(0),next(NULL),first(true){}          //定义未有任何数据时的链表
    lizi(int a):its(a),next(NULL),first(false){}    //定义链表时赋予数据
    ~lizi(){}
    void increace(int x)// 数据插入函数
    {
       if(first==true)   //判断链表是否已有数据
       {
          its=x;
          next=NULL;
          first=false;
       }      
       else             //已有有数据的话从末端插入数据
       {           
           //head=NULL;
           lizi *ptr2;
          ptr2=next;
          if(ptr2!=NULL)//判断链表是否只有一个数据
          {
          for(int i=1;i==1;)
          {
              if(ptr2->next==NULL)
                  break;
              else
                  ptr2=ptr2->next;
          }
          ptr2->next=new(lizi);
          ptr2=ptr2->next;
          ptr2->its=x;
          ptr2->next=NULL;
          }
          else
          {
              next=new(lizi);
              ptr2->its=x;
              ptr2->next=NULL;
          }
           first=false;
       }
    }
    // 
       void pirn()           //链表输出函数
       {
           cout<<its<<"  ";
           lizi * ptr1;
           ptr1=this;
           //cout<<ptr1->its<<"  ";
           for(int i=1;i==1; )
           {
               
               if (ptr1->next==NULL)
                  break;
               else
               {                   
                   ptr1=ptr1->next;
                   cout<<ptr1->its<<"  ";
               }
               system("pause");
            }
         }  
private:
    int its;
    lizi *next;
    bool first;
};
int main()
{
    lizi sp(3);
    sp.increace(4);
    sp.increace(5);
    sp.increace(7);
    sp.increace(8);
    sp.increace(9);
    sp.increace(10);
    sp.increace(11);
    sp.increace(12);
    sp.increace(13);
    sp.pirn();
    cout<<endl;
    system("pause");
    return 0;
}

回复列表 (共3个回复)

沙发

楼主,请问为什么要判断链表是否只有一个数据?

板凳

判断链表是否只有一个数据。 判断插入数据时是否只有第一个数据。如果是的话执行这段
{
              next=new(lizi);
              ptr2->its=x;
              ptr2->next=NULL;
          }
不是的话就执行
{
          for(int i=1;i==1;)
          {
              if(ptr2->next==NULL)
                  break;
              else
                  ptr2=ptr2->next;
          }
          ptr2->next=new(lizi);
          ptr2=ptr2->next;
          ptr2->its=x;
          ptr2->next=NULL;
          }
不用判断的话我不能把那两段程序合在一起

3 楼

你试着分两个函数写吧,
一个是查询是否存在的,
是一个是插入新数据的

我来回复

您尚未登录,请登录后再回复。点此登录或注册