问题遇到的现象和发生背景
洛谷P1160一直RE不知道哪错了,在VS上跑没报错也没爆警告
问题相关代码
#include<iostream>
using namespace std;
struct queue {
int num=0;
queue* left = NULL;
queue* right = NULL;
}que[100100];
queue* head = &que[1];
void insert(int k, int p, int i) {
queue* r = &que[i];
queue* s = &que[k];
if (s->num == head->num) {
if (p == 1) {
r->right = s->right;
s->right->left = r;
s->right = r;
r->left = s;
}
if (p == 0) {
s->left = r;
r->right = s;
r->left = NULL;
head = head->left;
}
}
else {
if (p == 1) {
r->right = s->right;
s->right->left = r;
s->right = r;
r->left = s;
}
if (p == 0) {
r->left = s->left;
s->left->right = r;
s->left = r;
r->right = s;
}
}
}
void delet(int x) {
queue* q = &que[x];
if (q->num == head->num) {
head = head->right;
}
else {
q->left->right = q->right;
q->right->left = q->left;
}
}
int main()
{
int i, n, k, p, m, x;
cin >> n;
for (i = 1; i < 100001; i++) {
que[i].num = i;
}
for (i = 2; i <=n; i++) {
cin >> k >> p;
insert(k, p, i);
}
cin >> m;
for (i = 0; i < m; i++) {
cin >> x;
delet(x);
}
while (head != NULL) {
cout << head->num << " ";
head = head->right;
}
return 0;
}
运行结果及报错内容
运行结果好像没什么问题,就是一直RE:Runtime Error.
Received signal 11: Segmentation fault with invalid memory reference.
我看老久了真不知道访问哪块不该访问区域了
我的解答思路和尝试过的方法
看到增删操作多就想到链表,看到有左右就用双向链表了