双向链表插入第一个元素时引发了异常: 写入访问权限冲突。 p->llink 是 nullptr。

ppp1234563 ppp1234563 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
自己写的一个双向链表的模板类,在插入第一个元素时就出现了问题,希望大神帮忙看看哪里有问题(有可能时插入函数那里)
同时很困惑不知道插入第一个元素时应该怎么写
代码在下面
template<class T>class DoubleList;
template<class T>class Node
{
T element;
Node<T>* llink;
Node<T>* rlink;
friend DoubleList<T>;
};
template<class T>class DoubleList
{
public:
DoubleList();
DoubleList(const int& n);
~DoubleList();
Node<T>* Located(int n);
bool Insert(int n, T x);
bool Remove(int n);
int Length();
void Print();
void Clear();
private:
Node<T>* Head;
};
template<class T>
DoubleList<T>::DoubleList() { Head = new Node<T>; Head->llink = NULL; Head->rlink = NULL; }
template<class T>
DoubleList<T>::DoubleList(const int & n) { Head = new Node<T>(n); Head->llink = NULL; Head->rlink = NULL; }
template<class T>
DoubleList<T>::~DoubleList() { Clear(); }
template<class T>
Node<T>* DoubleList<T>::Located(int n)
{
Node<T>* p = Head;
int i = 0;
if (n < i) { cout << "定位出错" << endl; return NULL; }
while (p->llink != NULL&&i < n) { p = p->rlink; i++; }
return p;
}

template<class T>
bool DoubleList<T>::Insert(int n,T x)
{
Node<T>* p = Located(n);
if (p == NULL) { cout << "插入元素失败,请检查需要插入元素的位置" << endl; return false; }
Node<T>* q = new Node<T>;
if (q == NULL) { cout << "为新元素分配空间时失败" << endl; return false; }


q->element = x;
q->llink = p->llink;
q->rlink = p;
p->llink->rlink = q;
p->llink = q;
return true;
}
template<class T>
bool DoubleList<T>::Remove(int n)
{
Node<T>* p = Located(n);
if (p == NULL) { cout << "删除元素失败,该位置很可能没有元素" << endl; return false; }
p->llink->rlink = p->rlink;
p->rlink->llink = p->llink;
delete p;
return true;
}
template<class T>
int DoubleList<T>::Length()
{
int count = 0;//计数器
Node<T>* p = Head;
while(p->rlink!=NULL)
{
p = p->rlink;
count++;
}
return count;
}
template<class T>
void DoubleList<T>::Print()
{
Node<T>* p = Head;
while(p->rlink!=NULL)
{
p = p->rlink;
cout << p->element <<" "<<endl;
}

}
template<class T>
void DoubleList<T>::Clear()
{
Node<T>* p = NULL;
while(p!=NULL)
{
p = Head->rlink;
Head->rlink = p->rlink;
delete p;
}

}


...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
ppp1234563
C++ 语言 65,214 成员 250,514 内容