链表反转
链表反转, 假设链表为a->b->…->n, 需要用反转a->b之前需要记录b的next指针,因此需要三个指针即可.
反转指针的写法有两种,递归法和循环法.
递归写法
1  | /**  | 
循环写法
1  | /**  | 
回文链表判断
- 第一步,找到链表的中间节点
 - 第二步,反转起始节点到中间节点的这部分链表
 - 从中间节点向两边扩散,检查是否为回文链表
 
1  | /**  | 
快速排序(分治法)
1  | int partition(vector<int> nums, int left, int right){  | 
归并排序(分治法)
1  | typedef long long LL;  | 
数组中逆序对个数(分治法)
1  | int64_t reverseNum(vector<int> nums, int low, int high){  | 
平面最近点对(分治法)
1  | 
  | 
并查集
1  | class UnionFind{  | 
prime 算法
1  | typedef vector<int> VI;  | 
kruskal算法(贪心法)
1  | 
  | 
dijkstra算法(贪心法)
1  | typedef vector<int> VI;  | 
spfa(动态规划)
1  | typedef vector<int> VI;  |