码迷,mamicode.com
首页 > 其他好文 > 详细

链表的循环删除

时间:2020-07-19 23:11:50      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:advance   访问   两种   注意   val   对象   ini   begin   --   

链表这一种数据结构很常见,拥有良好的动态操作性能,比如插入,删除,但是对于静态操作,比如随机访问不太友好,链表的访问只能通过迭代器来查找。
这次主要说明一下链表的删除,其中有两种删除方式分别为: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 L;
for(int i=0;i<n;i++)
L.push_back(i);
while(n>1){
temp=(temp+m-1)%n;
list::iterator it=L.begin();
advance(it, temp);
L.erase(it);
n--;
}
return L.front();
}
};
`

链表的循环删除

标签:advance   访问   两种   注意   val   对象   ini   begin   --   

原文地址:https://www.cnblogs.com/fpf123/p/13341026.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!