1.链表去重
我写了list和deque两种,都可以unique函数来简化。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <list>
#include <deque>
using namespace std;
deque <int> l;
list<int> s;
void _deuqe(){
for(int i = 1; i <= 10 ; i++)
l.push_back(i);
for(int i = 2; i <= 10 ; i+= 2)
l.push_front(i);
sort(l.begin(),l.end());
for(auto i = l.begin()+1;i != l.end(); ){
int k = (*i);
int b = (*(i-1));
//cout <<k <<" "<<b<<endl;
if(k == b) i = l.erase(i);//通过erase方法的返回值来获取下一个元素的位置
else i++;
}
for(auto i = l.rbegin()+1;i != l.rend(); i++)
cout << (*i) <<endl;
/* unique:
int k = unique(l.begin(),l.end())-l.begin();
cout <<k<<endl;
for(auto i = l.begin();i != l.begin()+k ; i++)
cout <<(*i) <<" ";
*/
}
void _list(){
for(int i = 1; i <= 10 ; i++)
s.push_back(i);
for(int i = 2; i <= 10 ; i+= 2)
s.push_front(i);
s.sort();
for(auto i:s)
cout<<i<<" ";
for(auto i= s.begin()++;i != s.end(); ){
int k = (*(--i));
i++;
if((*i)==k) {
i = s.erase(i);
}
else i++;
}
for(auto i:s)
cout<<i<<" ";
}
int main(){
// string a;
// cin >> a;
// cout <<a.length();
_deuqe();
_list();
}
2.实现一个算法从一个单链表中返回倒数第n个元素。
两个指针,相差n,一个到end时另一个指的就是。
3实现一个算法来删除单链表中间的一个结点,只给出指向那个结点的指针。
三种情况:1.头结点;2.中间结点。 3.尾结点。4.为空。情况1,2直接将d的数据给c,c的next指针指向d 的next指向所指结点,删除d就OK。情况3:直接删除,情况4为空,直接返回。