Односвязный вариант
struct Node {
Node *next;
int value;
Node(int v):
value(v),
next(0) {
}
};
Node* insert_after(Node* i,value) {
Node* t = new Node(value);
t->next = i->next;
i->next = t;
return t;
}
// Можно использовать только для вставки в начало списка
Node* insert_before(Node* i, value) {
Node* t = new Node(value);
t->next = i;
return t;
}
Двусвязный вариант
struct Node {
Node *next;
Node *prev;
int value;
Node(int v):
value(v),
next(0),
prev(0) {
}
};
Node* insert_after(Node* i,value) {
Node* t = new Node(value);
t->next = i->next;
if (t->next)
t->next->prev = t;
i->next = t;
t->prev = i;
return t;
}
// Можно использовать для вставки в любое место списка, благодаря двусвязности
Node* insert_before(Node* i, value) {
Node* t = new Node(value);
t->prev = i->prev;
if (t->prev)
t->prev->next = t;
i->prev = t;
t->next = i;
return t;
}
Последнее изменение: Суббота, 15 Август 2020, 02:34