LinkedList removePosition 删除错误的元素
LinkedList RemovePosition Removing the Wrong Element
我正在创建一个模板化的链接列表,并使用它来模拟经过站点的火车。LinkedList
的每个元素都是具有numberOfStops
变量的TrainCar
类的对象。如果此值在停止处等于 1,则LinkedList
应该从列表中删除该元素。但是,它最终会删除它之前的元素。
我尝试修改RemovePosition
函数和我通过此函数传递的值,但似乎没有什么能解决问题
这是我在LinkedList
课上的RemovePosition()
函数
template <class T>
void LinkedList<T>::RemovePosition(int index) {
if(index == 0) {
RemoveFromFront();
}
else if(index == (size - 1)) {
RemoveFromEnd();
}
else {
node<T>* temp1 = head;
for(int i = 0; i < index - 1; i++) {
temp1 = temp1->next;
}
node<T>* temp2 = temp1->next;
temp1->next = temp2->next;
size--;
}
}
这是我发生错误的main()
函数代码
for(j = 1; j <= stops; j++) {
cout << "Stop #" << j << ":" << endl;
cout << "Train Arriving: ";
for(i = 0; i < train.size; i++) {
type = train.Retrieve(i).typeOfCar;
id = train.Retrieve(i).finalID;
numberOfStops = train.Retrieve(i).numberOfStops;
cout << "[" << id << ":" << type << ":" << numberOfStops << "] ";
}
cout << endl << "Removing cars:" << endl;
for(i = 0; i < train.size; i++) {
numberOfStops = train.Retrieve(i).numberOfStops;
if(numberOfStops == 1) {
id = train.Retrieve(i).finalID;
type = train.Retrieve(i).typeOfCar;
cout << "[" << id << ":" << type << "] removed" << endl;
if(train.Retrieve(i).typeOfCar == 'P') {
addCargoCar--;
}
train.RemovePosition(i);
}
}
}
这是我当前的输出
Stop #1:
Train Arriving: [9:P:4] [5:P:2] [3:P:2] [10:C:2] [8:C:1] [1:C:2] [2:M:1] [4:M:5] [6:M:4] [7:M:1]
Removing cars:
[8:C] removed
[2:M] removed
[7:M] removed
Adding cars:
[11:P:2] added
[12:C:4] added
[13:P:4] added
[14:M:2] added
[15:M:2] added
Stop #2:
Train Arriving: [13:P:4] [11:P:2] [9:P:4] [5:P:2] [3:P:2] [12:C:4] [8:C:1] [2:M:1] [4:M:5] [7:M:1] [14:M:2] [15:M:2]
如您所见,取出了错误的TrainCar
。使用这些相同的输入,到达停靠点 #2 的火车的正确结果为:
Stop #1:
Train Arriving: [9:P:4] [5:P:2] [3:P:2] [10:C:2] [8:C:1] [1:C:2] [2:M:1] [4:M:5] [6:M:4] [7:M:1]
Removing cars:
[8:C] removed
[2:M] removed
[7:M] removed
Adding cars:
[11:P:2] added
[12:C:4] added
[13:P:4] added
[14:M:2] added
[15:M:2] added
Stop #2:
Train Arriving: [13:P:4] [11:P:2] [9:P:4] [5:P:2] [3:P:2] [12:C:4] [10:C:2] [1:C:2] [4:M:5] [6:M:4] [14:M:2] [15:M:2]
编辑1:实施@leJohn提供的解决方案时,我现在收到分段错误。我相信这必须是对我对RemoveFromEnd()
函数的调用,因为当我在main()
函数中将 if 条件设置为if(numberOfStops == 2)
时,此解决方案有效。这是我RemoveFromEnd()
函数
template <class T>
void LinkedList<T>::RemoveFromEnd() {
node<T>* cur = head;
node<T>* pre = cur;
while(cur->next != NULL) {
pre = cur;
cur = cur->next;
}
pre->next = NULL;
tail = pre;
size--;
}
我不明白为什么这会导致错误...
替换你的循环:
for(int i = 0; i < index - 2; i++) {
temp1 = temp1->next;
}
由
for(int i = 0; i < index - 1; i++) {
temp1 = temp1->next;
}
它应该可以解决问题
相关文章:
- 从矢量中删除元素后出现隔离错误
- 删除映射和分割错误中的一个过去结束元素
- 在 alglib::real_1d_array 中获取元素总和的奇怪错误
- C++ - 将元素按升序插入数组的 SEG 错误
- 使用 <list> (错误 C2760) 打印队列的元素
- C++:使用类在向量中搜索特定元素时,我得到了错误的结果
- 用于查找数组中最大元素的出现次数的代码,给出分段错误
- C++ 将元素分配给映射值时访问错误
- 从加密项目向量中解密任意选择的元素会导致无效的 PKCS #7 块错误
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- Leetcode 540 上的运行时错误.排序数组中的单个元素
- std::我不明白的矢量元素错误
- 如何修复从矢量中删除元素的错误?
- 为什么我在对向量的第二个元素"push_back"中有C3867错误
- 尝试访问 3D 矢量中的元素时出现 Seg 错误
- OpenCV 文件存储 - 错误:元素之间的解析错误 (icvYMLParseValue) 缺失
- 访问range_expression中的嵌套元素会返回不完整的映射(段错误)
- 打印向量元素错误消息
- 数组中的cout元素错误,错误
- 迭代并移除Vector中的元素.错误:Vector迭代器不可递增