0
我正在处理我自己的链接列表类。一切正常。 删除功能也适用,但如果我尝试删除第一个元素,则应用程序停止响应。从链接列表中删除第一个元素
我不知道,我错了什么。
的源代码:
#include <iostream>
using namespace std;
template<class T>
class linkedList {
private:
struct elem {
elem* p; // pointer
T v; // value
elem* next() {
return p;
}
};
int elems = 0;
elem* first;
elem* last() {
if(first == 0) return 0;
elem* e = first;
while(e->p != 0) {
e = e->p;
}
return e;
}
elem* getP(int index) {
int i=0;
elem* e;
e->p = first;
while(i!=index) {
e = e->p;
i++;
}
return e->p;
}
public:
T& get(int index) {
int i=0;
elem* e;
if(elems<index) throw 0x77;
e->p = first;
while(i!=index) {
e = e->p;
i++;
}
return (e->p)->v;
}
void add(T el) {
elem* u = last();
elem* e = new elem;
e->p = 0;
e->v = el;
if(u == 0) {
first = e;
} else {
u->p = e;
}
elems++;
}
int size() {
return elems;
}
void remove(int index) {
if(elems<index) throw 0x77;
if(index == 0) {
elem* e = first->p;
first->p = e->p;
delete e;
elems--;
} else {
elem* p = getP(index-1);
elem* e = p->p;
elem* n = e->p;
delete e;
p->p = n;
elems--;
}
}
};
int main()
{
linkedList<int> myList;
myList.add(10);
myList.add(12);
myList.add(4);
myList.add(7);
myList.remove(0);
cout << myList.get(0) << endl;
return 0;
}
首先,不要使用单个字符变量名称,因为它们在混淆代码方面非常有效,因此很难理解并容易忽略错误。 –
请创建一个构造函数,将您的成员初始化为某些东西......您正在''第一''对抗'nullptr',但不能保证事先分配给它!默认的构造函数不会将元素设置为'nullptr' ... – Johan
如果Johan的初始化成员对您不起作用,我建议您使用谷歌的“调试器+”并尝试手动执行您的程序流程。它将帮助您发现一般错误。 –
DarthB