-2
我正在做一个家庭作业任务,给定一个n元素的链表,m个序列将被删除。每个序列都有一个起始值,一个结束值和一个步长。但是,一些序列可以从链表的末尾开始,并在列表的开头结束,例如:列表1 2 3 4 5,我需要按顺序删除元素5到2(5,1,2) 。如何在不循环的情况下再次返回列表?如何在C++中多次遍历一个链表?
我正在做一个家庭作业任务,给定一个n元素的链表,m个序列将被删除。每个序列都有一个起始值,一个结束值和一个步长。但是,一些序列可以从链表的末尾开始,并在列表的开头结束,例如:列表1 2 3 4 5,我需要按顺序删除元素5到2(5,1,2) 。如何在不循环的情况下再次返回列表?如何在C++中多次遍历一个链表?
你可以这样做:
void remove_value_to_value_as_ring(std::list<int>& l, int val1, int val2)
{
auto it1 = std::find(l.begin(), l.end(), val1);
if (it1 == l.end()) {
return; // Not found
}
auto it2 = std::find(it1, l.end(), val2);
if (it2 != l.end()) {
l.erase(it1, it2);
return;
}
it2 = std::find(l.begin(), it1, val2);
if (it2 == it1) {
return; // Not found
}
l.erase(it1, l.end());
l.erase(l.begin(), std::next(it2));
}
如果您遍历列表递归,您可以通过从当前范围返回“后移通过列表”。 –