从链接列表中删除第一个元素
Remove first element from the linked list
我正在处理自己的链表类。一切都很好。remove操作也可以,但如果我试图删除第一个元素,那么应用程序就会停止响应。
我不知道,我做错了什么。
源代码:
#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;
}
在remove(int)
方法中,当index
为0时,设置第一个元素的指针,而不是设置指向第一个元素:
void remove(int index) {
if(elems<index) throw 0x77;
if(index == 0) {
elem* e = first;
first = first->p; // Set first instead of first->p
delete e;
elems--;
} else {
elem* p = getP(index-1);
elem* e = p->p;
elem* n = e->p;
delete e;
p->p = n;
elems--;
}
}
顺便说一句:你的代码中可能还有一些与此相关的错误,这些错误不会导致错误。
相关文章:
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- C++ queue.front();为什么不从第一个元素开始呢?
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 从队列中删除第一个元素C++
- 如果第一个元素包含任何零,则我的程序以不希望的方式运行
- 为什么数组不打印第一个元素?
- 在数组中显示第一个元素用户输入
- 消除集合的第一个元素
- 为什么指向矢量第一个元素的指针会丢失?
- 如何打印出常量字符串的第一个元素?
- 读取数组的第一个元素还是第 4000 个元素更快?
- 如何在数组的一部分中查找特定值的第一个元素
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 访问指向对象指针向量的指针的第一个元素?
- 引用保留向量中的第一个元素
- 指向数组的指针是否应该等于指向其第一个元素的指针?
- 尝试将参数包的第一个元素作为函数调用,并将包的其余部分作为参数传递给它
- 代码是否有效.如果我想显示第一个元素?如果不是,那么 s.begin() 会返回什么?