典型问题分析3—LinkList中遍历操作与删除操作混合使用
Posted -glb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了典型问题分析3—LinkList中遍历操作与删除操作混合使用相关的知识,希望对你有一定的参考价值。
LinkList中遍历操作与删除操作混合使用
删除成功后,list.current()返回什么值?
#include <iostream>
#include "LinkList.h"
using namespace std;
using namespace DTLib;
int main()
{
LinkList<int> list;
for(int i=0; i<5; i++)
{
list.insert(i);
}
for(list.move(0); !list.end(); list.next())
{
if(list.current() == 3)
{
list.remove(list.find(list.current()));
cout << list.current() <<endl;
}
}
return 0;
}
打印结果:
这显然是一个随机值,那为什么会出现这种情况呢?
3所对应的堆内存已经被释放了,但是p指针却没有变化,还是指向原来内存。所以才会打印那个奇怪的值。
修改remove函数如下:
bool remove(int i)
{
bool ret = ((0<=i) && (i<m_length));
if(ret)
{
Node* current = position(i);
Node* toDel = current->next;
if(m_current == toDel)
{
m_current = toDel->next;
}
current->next = toDel->next;
m_length--;
destroy(toDel);
// m_length--;
}
return ret;
}
本篇文章想要说明,当删除链表中的一个元素时,不要忘记当前的指针也要移动哦。否则就会造成上面出现的现象。
以上是关于典型问题分析3—LinkList中遍历操作与删除操作混合使用的主要内容,如果未能解决你的问题,请参考以下文章