链表的循环删除

Posted fpf123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的循环删除相关的知识,希望对你有一定的参考价值。

链表这一种数据结构很常见,拥有良好的动态操作性能,比如插入,删除,但是对于静态操作,比如随机访问不太友好,链表的访问只能通过迭代器来查找。
这次主要说明一下链表的删除,其中有两种删除方式分别为: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();
}
};
`


























以上是关于链表的循环删除的主要内容,如果未能解决你的问题,请参考以下文章

链表的插入和删除

链表的插入和删除

数据结构C语言版 —— 链表增删改查实现(单链表+循环双向链表)

c学习之单向链表的删除与清除操作

19. 删除链表的倒数第N个节点(链表)

hdu1276STL链表的应用