代码来源:晴神《算法笔记》!!
静态链表问题通用解题模板
- 定义静态链表
struct Node{
typename data;
int next;
XXX;
}node[size]; //使用静态链表时,结构体类型名和结构体变量名不要相同
- 初始化
XXX初始化为正常情况下达不到的数字,比如:
for(int i = 0; i < maxn; i++){
node[i].XXX = 0;
}
- 遍历并对XXX标记
int p = begin, count = 0;
while(p != -1){
count++;
XXX = 1;
p = node[p].next;
}
- 排序
一般情况下,题目中给出的不都是有效结点,有时我们需要把有效结点都移到数组最左端,这时可以根据XXX的值对数组进行排序。另外,根据题目的要求可能还存在第二级排序,这时需对cmp函数进行相应修改。
bool cmp(Node a, Node b){
if(a.XXX == -1 || b.XXX == -1)
return a.XXX > b.XXX;
else{
//第二级排序
}
}