class linked_list {
private:
struct Node {
int value = 0;
weak_ptr<Node> prev;
shared_ptr<Node> next = nullptr;
};
shared_ptr<linked_list::Node> guard = make_shared<linked_list::Node>();
shared_ptr<Node> locate(int);
public:
shared_ptr<Node> insert(int, int);
shared_ptr<Node> search(int);
bool remove(int);
shared_ptr<Node> set_value(int, int);
bool is_empty();
shared_ptr<Node> reverse();
void show(bool);
Node &operator [](int);
};
shared_ptr<linked_list::Node> linked_list::locate(int seq) {
if (abs(seq) > guard->value) abort();
auto p = guard;
if (seq >= 0) {
for (int i = 0; i < seq; i++) p = p->next;
}
else {
p = p->next;
for (int i = -seq; i > 0; i--) p = p->prev.lock();
}
return p;
}
shared_ptr<linked_list::Node> linked_list::insert(int seq, int value) {
if (abs(seq) <= guard->value + 1) guard->value++;
shared_ptr<Node> p = nullptr;
if (seq > 0) p = locate(--seq);
else p = locate(seq);
if (p == guard) {
p->next = make_shared<Node>(value);
p->next->next = p->next;
p->next->prev = p->next;
}
else {
auto q = p->next;
p->next = make_shared<Node>(value);
p->next->prev = p;
p->next->next = q;
q->prev = p->next;
}
return p->next;
}
int main() {
linked_list m;
m.insert(-1, 2);
cout << "reverse: " << endl;
}
macbook报错,提示
zsh: segmentation fault