10.pop_back( )
删除链表末尾节点
void pop_back();//删除链表末尾节点
1. l4.pop_back();//删除l4末尾节点 2. 3. PrintContainer(l4);
11.insert( )
在某一位置插入节点
iterator insert (iterator position, const value_type& val);//在某一位置插入值为val的节点
1. list<int>::iterator pos = find(l4.begin(), l4.end(), 6);//查找6的位置 2. 3. l4.insert(pos, 100);//在6的位置插入100 4. 5. PrintContainer(l4); 6. cout << *pos << endl;
迭代器没有失效:
12.erase( )
iterator erase (iterator position);//删除position位置的节点
pos已经是6的位置了,删除6之后,pos就失效了,变成了野指针,再对pos解引用就会报错
1. l4.erase(pos); 2. PrintContainer(l4); 3. cout << *pos << endl;
需要在erase进行删除后,对迭代器重新赋值,pos就不会是野指针了,代码应该改成这样:
1. l4.erase(pos); 2. pos = find(l4.begin(), l4.end(), 12); 3. PrintContainer(l4); 4. cout << *pos << endl;
13.swap( )
交换两个同类型list的内容
void swap (list& x);//交换两个同类型list的内容
1. l4.swap(l3);//交换l3和l4的内容 2. cout << "l3: "; 3. PrintContainer(l3); 4. cout << "l4: "; 5. PrintContainer(l4);
14.clear( )
清空list的内容
void clear();//清空list的内容
1. l4.clear();//清空l4的内容 2. PrintContainer(l4);
15.remove( )
删除链表中所有指定值的节点
void remove (const value_type& val);//删除链表中所有值为val的节点
1. list<int> l5; 2. l5.push_back(1); 3. l5.push_back(2); 4. l5.push_back(2); 5. l5.push_back(2); 6. 7. l5.remove(2);//删除所有值为2的节点 8. 9. PrintContainer(l5);
16.unique( )
去重,删除所有值相同的节点,只保留第一个
void unique();//每个节点的值只保留一个
1. list<int> l6; 2. l6.push_back(7); 3. l6.push_back(2); 4. l6.push_back(2); 5. l6.push_back(3); 6. l6.push_back(8); 7. l6.push_back(8); 8. l6.push_back(6); 9. 10. l6.unique();//去重 11. 12. PrintContainer(l6);
注意:但是unique( )只对连续相同值的节点去重,如果节点不连续,就算节点值相同也不会去重
假如l6插入的节点,相同值不连续,unique就去重不了 :
1. list<int> l6; 2. l6.push_back(7); 3. l6.push_back(8); 4. l6.push_back(2); 5. l6.push_back(3); 6. l6.push_back(2); 7. l6.push_back(8); 8. l6.push_back(6); 9. 10. l6.unique();//去重,达不到目的,因为相同值不连续 11. 12. PrintContainer(l6);
所以unique( )必须和排序sort( )结合起来才能去重
17.sort( )
对链表节点排序
void sort();//对链表节点排序
1. list<int> l6; 2. l6.push_back(7); 3. l6.push_back(8); 4. l6.push_back(2); 5. l6.push_back(3); 6. l6.push_back(2); 7. l6.push_back(8); 8. l6.push_back(6); 9. 10. l6.sort(); 11. PrintContainer(l6);
链表的排序基本没啥用,如果要排序,就存vector了
18.reverse( )
对链表进行逆置
void reverse();//逆置链表
1. list<int> l6; 2. l6.push_back(7); 3. l6.push_back(8); 4. l6.push_back(2); 5. l6.push_back(3); 6. l6.push_back(2); 7. l6.push_back(8); 8. l6.push_back(6); 9. 10. l6.sort(); 11. PrintContainer(l6);
链表的许多操作,对于做OJ题很有用