jazm_blk 2017-12-05 12:35 采纳率: 100%
浏览 1099
已采纳

关于c++中的双向循环链表

 #pragma once
#define V_TPLS template<class T>\
                void MyList<T>::

template<class T>
class MyList
{
    T data;
    MyList* next, *back;
public:
    MyList()
    {
        next = this;
        back = this;
        data = 0;
    }
    //在链表后插入数据
    void push_back(T data);
    //在链表前插入数据
    void push_front(T data);//前继
    //清空整个链表
    void _clear()
    {
        while (this->next!=this)
        {
            MyList *temp = this->next;
            this->next = this->next->next;
            delete temp;
        }
    }

    void put()
    {
        MyList *p = this->next;
        while (p!=this)
        {
            cout << p->data << ends;
            p = p->next;
        }
    }

    ~MyList()
    { _clear(); }
};

//在链表后插入数据
V_TPLS push_back(T data)
{
    MyList *temp = new MyList;
    temp->data = data;
    static MyList*p_n = this;
    temp->next = p_n->next;
    temp->back = p_n;
    p_n->next = temp;
    p_n = p_n->next;
    this->back = temp;
}
//在链表前插入数据
V_TPLS push_front(T data)
{
    MyList *temp = new MyList;
    temp->data = data;
    temp->next = this->next;
    temp->back = this;
    this->next->back = temp;
    this->next = temp;
}


为什么我的_clear()运行的时候this指针的地址为什么会改变呢?
每次运行到_clear()函数时就会报错

  • 写回答

3条回答 默认 最新

  • God_Gray 2017-12-05 15:00
    关注

    _clear() push_back() push_front()函数都有问题,改了三个函数的代码,你参照看下。

        void _clear()
        {
            while (this->next != this)
            {
                MyList *temp = this->next;
                this->next = temp->next;
                temp->next->back = temp->back;
    
                temp->next = temp;
                temp->back = temp;
                delete temp;
            }
        }
    
    //在链表后插入数据
    V_TPLS push_back(T data)
    {
        MyList* newList = new MyList;
        newList->data = data;
    
        MyList* temp = this->next;
        this->next = newList;
        newList->next = temp;
        newList->back = this;
        temp->back = newList;
    }
    
    //在链表前插入数据
    V_TPLS push_front(T data)
    {
        MyList* newList = new MyList;
        newList->data = data;
    
        MyList* temp = this->back;
        this->back = newList;
        newList->back = temp;
        newList->next = this;
        temp->next = newList;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化