【发布时间】:2020-04-26 08:41:56
【问题描述】:
如何从列表中删除,例如从位置 1 到 4?
我只是用列表中的 1 个元素解决了这个删除问题:
void delPos(int iPos) {
ListElem *pElemToDelete = mpHead;
for (int i = 0; i < iPos; ++i) {
pElemToDelete = pElemToDelete->mpNext;
}
if (pElemToDelete != nullptr) {
if (mpHead == pElemToDelete) {
mpHead = pElemToDelete->mpNext;
delete pElemToDelete;
} else {
for (ListElem *pTmp = mpHead; pTmp != nullptr; pTmp = pTmp->mpNext) {
if (pTmp->mpNext == pElemToDelete) {
pTmp->mpNext = pElemToDelete->mpNext;
delete pElemToDelete;
return;
}
}
}
}
对于位置删除(从头到尾)我得到了这个:
void deleteElem(int start, int end) {
ListElem *pTmp1 = m_pHead;
ListElem *pTmp2 = m_pHead;
for (int i = 0; i < end; ++i) {
if (i < start - 1) {
if (pTmp1->m_pNext != nullptr) {
pTmp1 = pTmp1->m_pNext;
}
}
if (pTmp2->m_pNext != nullptr) {
pTmp2 = pTmp2->m_pNext;
}
}
if (start == 0) {
m_pHead = pTmp2->m_pNext;
} else {
pTmp1->m_pNext = pTmp2->m_pNext;
}
}
但它并没有真正被删除对吧?它只显示指向正确元素的下一个指针。我像上面一样用 1 个元素尝试它,但它不起作用。
也许你们可以给我一些建议?
【问题讨论】:
-
您将其作为家庭作业/练习来实现,还是为了弄清楚如何实现列表,或者您真的需要一个您想要使用的列表?
-
这不是很明显的解决方法,但是试着用普通的笔和纸画出你想要的东西,它会让你思考你的列表是如何连接的,以及你想要实现什么。跨度>
-
t.niese 它是我学习列表基础知识的练习。是的,我需要它作为列表@Artem Bondar是的,我做到了..我的问题是我来自java有一个垃圾收集器所以我只需要将指针的引用设置到正确的位置并删除未使用的元素一个列表..在c ++中你需要自己删除,它的过程不同..我想从位置1删除到4,其他的应该显示出来。
-
@MoFug -- 你知道如何删除整个列表吗?这应该与删除整个列表的步骤几乎相同。
-
@PaulMcKenzie 你的意思是这样的吗?
ListElem* pTmp = mpHead; for(ListElem* pTmp = mpHead;pTmp != nullptr;pTmp = pTmp->mpNext) { delete pTmp;// return; }
标签: c++ linked-list singly-linked-list delete-operator