Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // структуру List не реализовал, потому что впадлу, все это некомпилирующийся код, но функция вставки рабочая при написании недостающего кода, например для List
- struct Node {
- public:
- Node(int value) : value(value) {}
- int value;
- Node *next;
- };
- // У циклического списка l есть begin - указатель на первый элемент списка, end - указатель на последний элемент списка,
- // а также каждый элемент списка, знает указатель на соседа справа через метод next.
- void insert(int value, int index) {
- Node insertedNode = Node(value);
- int ithElement = 1;
- Node current = l.begin();
- // находим куда вставлять value в спикске l (допускаем, что index < чем длина списка, то есть вставить можем всегда)
- while (ithElement != index - 1) {
- current = current.next;
- ++ithElement;
- }
- // до вставки на (index)-ый элемент указывал (index-1)-ый, теперь мы на место (index)-го вставляем новый, значит нужно поменять указатель на
- // следующий элменет у (index-1)-го элемента, а у вставленного элемента следующим элементом указать (index)-й
- //
- // как было раньше: ... -> list[index - 1] -> list[index] -> ...
- //
- // как стало: ... -> list[index - 1] -> current -> list[index] -> ... (в терминах старых индексов)
- //
- // в терминах новых индексов это то же самое, что и: ... -> list[index - 1] -> list[index] -> list[index + 1] (здесь list[index + 1] это list[index] из строчки выше
- Node* temp = current.next;
- current.nextNode = insertedNode;
- insertedNode.next = temp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement