原题链接
在算法题目中通常使用数组模拟链表,不使用 new 来初始化 Node 节点,因为数组模拟的速度非常快,new 操作很慢。
-
使用 e[i] ne[i] head idx
模拟的链表叫做静态链表。
-
使用
1 2 3 4
| struct Node { int val; Node* next; };
|
这样的结构体和 new
关键字创建的链表叫做动态链表。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include <iostream> using namespace std;
const int N = 100010;
int e[N], ne[N], head, idx;
void init() { head = -1; idx = 0; }
void add_to_head(int x) { e[idx] = x; ne[idx] = head; head = idx++; } void add(int k, int x) { e[idx] = x; ne[idx] = ne[k]; ne[k] = idx++; } void remove(int k) { ne[k] = ne[ne[k]]; }
int main() { int m; cin >> m; init(); while(m--) { char op; int k, x; cin >> op; if(op == 'H') { cin >> x; add_to_head(x); } else if(op == 'D') { cin >> k; if(!k) head = ne[head]; else remove(k-1); } else { cin >> k >> x; add(k-1, x); } } for(int i=head;i!=-1;i=ne[i]) { cout << e[i] << " "; } cout << endl; }
|