链表的循环删除

链表这一种数据结构很常见,拥有良好的动态操作性能,比如插入,删除,但是对于静态操作,比如随机访问不太友好,链表的访问只能通过迭代器来查找。
这次主要说明一下链表的删除,其中有两种删除方式分别为:name.erase(const_iterator __first, const_iterator __last)和name.remove(const int &__value)。
从中可以看出,erase针对的是迭代器,也就是一个地址指针,并在删除后返回迭代器的下一个,所以要注意迭代器的范围;
而remove则是删除对象是节点里对应的值value,若有多个节点的value都为删除目标,则这些节点全部都删除,所有remove是先查找,再删除,其中查找也是用到了迭代器。
下面是一个循环删除节点的程序。
class Solution { public: int LastRemaining_Solution(int n, int m) { if(n<=0) return -1; int temp=0;; list<int> L; for(int i=0;i<n;i++) L.push_back(i); while(n>1){ temp=(temp+m-1)%n; list<int>::iterator it=L.begin(); advance(it, temp); L.erase(it); n--; } return L.front(); } };

posted @ 2020-07-19 20:10  321菜鸟起飞  阅读(336)  评论(0)    收藏  举报