Односвязный вариант
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