Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // структуру List не реализовал, потому что впадлу, все это некомпилирующийся код, но функция вставки рабочая при написании недостающего кода, например для List
  2. struct Node {
  3. public:
  4.     Node(int value) : value(value) {}
  5.    
  6.     int value;
  7.     Node *next;
  8. };
  9.  
  10. // У циклического списка l есть begin - указатель на первый элемент списка, end - указатель на последний элемент списка,
  11. // а также каждый элемент списка, знает указатель на соседа справа через метод next.
  12. void insert(int value, int index) {
  13.    
  14.     Node insertedNode = Node(value);
  15.    
  16.     int ithElement = 1;
  17.     Node current = l.begin();
  18.    
  19.    
  20.     // находим куда вставлять value в спикске l (допускаем, что index < чем длина списка, то есть вставить можем всегда)
  21.     while (ithElement != index - 1) {
  22.         current = current.next;
  23.         ++ithElement;
  24.     }
  25.    
  26.     // до вставки на (index)-ый элемент указывал (index-1)-ый, теперь мы на место (index)-го вставляем новый, значит нужно поменять указатель на
  27.     // следующий элменет у (index-1)-го элемента, а у вставленного элемента следующим элементом указать (index)-й
  28.     //
  29.     // как было раньше:  ... -> list[index - 1] -> list[index] ->  ...
  30.     //
  31.     // как стало: ... -> list[index - 1] -> current -> list[index] -> ...  (в терминах старых индексов)
  32.     //
  33.     // в терминах новых индексов это то же самое, что и: ... -> list[index - 1] -> list[index] -> list[index + 1] (здесь list[index + 1] это list[index] из строчки выше
  34.     Node* temp = current.next;
  35.     current.nextNode = insertedNode;
  36.     insertedNode.next = temp;  
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement