2017-02-03 26 views
-2

我正在做一个家庭作业任务,给定一个n元素的链表,m个序列将被删除。每个序列都有一个起始值,一个结束值和一个步长。但是,一些序列可以从链表的末尾开始,并在列表的开头结束,例如:列表1 2 3 4 5,我需要按顺序删除元素5到2(5,1,2) 。如何在不循环的情况下再次返回列表?如何在C++中多次遍历一个链表?

+0

如果您遍历列表递归,您可以通过从当前范围返回“后移通过列表”。 –

回答

0

你可以这样做:

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)); 
} 

Demo