У меня есть вектор в векторе в вектор ..... Но я не знаю, сколько из них (какая глубина). Как изменить содержимое последнего вектора?Вектор в вектор ... Java
ответ
Вы собираетесь использовать ... дождаться его ... РЕЗЕРВИРОВАНИЕ!
Вот пример связанного списка
public Node<E> go_deep(Node<E> nodeRef) {
// base case
if(nodeRef.next == NULL)
return nodeRef;
return go_deep(nodeRef.next);
}
Тогда вы можете получить «последний» узел по:
public static void main(String[] args) {
Node<E> lastNode = go_deep(head);
}
Где голова ваш первый элемент (вектор в данном случае). У вас могут быть разные методы для следующих и предыдущих ...
Я пишу это с головы до головы, и вам нужно определить узел, если вы действительно хотите, чтобы это работало, его просто основная идея. ..
Если Vector (Node в моем примере) не передается по ссылке:
// if you have two-way references
public static void main(String[] args) {
Node<E> lastNode = go_deep(head); //returns the last Node
Node<E> prevNode = lastNode.prev; //returns the Node before
Node<E> newNode = new Node<E>();
// update newNode with lastNode's values
newNode.foo = lastNode.foo;
newNode.bar = lastNode.bar + 7;
prevNode.next = newNode; //newNode is inserted into the structure - lastNode dies :(
}
Если у вас есть один конец ссылки, мы изменяем go_deep возвращать массив узла и его родителей:
public Node<E>[] go_deep(Node<E> nodeRef) {
// base case
// THERE ARE EDGE CASES THAT I'M IGNORING BECAUSE I'M NOT PROGRAMMING FOR YOU!
if(nodeRef.next.next == NULL) {
Node<E>[] arr = new Node<E>[2];
arr[0] = nodeRef; // the "prev" node
arr[1] = nodeRef.next; // the "last" node
return arr;
}
return go_deep(nodeRef.next);
}
затем в основной:
public static void main(String[] args) {
Node<E>[] nodes = go_deep(head); //returns the array of nodes
Node<E> lastNode = nodes[1]; // returns the last Node
Node<E> prevNode = nodes[0]; //returns the Node before
Node<E> newNode = new Node<E>();
// update newNode with lastNode's values
newNode.foo = lastNode.foo;
newNode.bar = lastNode.bar + 7;
prevNode.next = newNode; //newNode is inserted into the structure - lastNode dies :(
}
в ответ на Сиф, вот как вы бы это сделать Жека НТКК. псевдокод, вероятно, изобилует опечатками, просто для описания идеи ...
примечание: страдает от той же проблемы, что и рекурсивные решения, где обратные ссылки могут вызывать бесконечные циклы. если память не является проблемой, сохраните список всех используемых во всех случаях (или, возможно, флаг в каждом элементе, чтобы указать, если следовать), или используйте пересекающиеся циклы incr &, пропустите 1, если память является проблемой. или просто установить. максимум ломит на глубину, которую вы пройдете.
// breadth first search to find deepest element FIND_DEEPEST: GIVEN tree; // vector of vectors DECLARE current, previous // stacks for the current depth and one level up DECLARW node, children, child // temp vars current = COPY(tree); WHILE current != NIL previous = current; current = nil; WHILE previous IS NOT empty node = POP(previous); APPEND CHILDREN(node) TO current; // CHILDREN just pops all elements of node // APPEND operates on lists, like in Perl
- 1. Раздвигая вектор в вектор
- 2. Добавить вектор в вектор
- 3. Сортировать вектор в java
- 4. Сравнивая вектор в Java
- 5. C вектор в символьном *** вектор
- 6. push_back вектор векторов в вектор
- 7. Вставить вектор в вектор, Matlab
- 8. Вставить вектор в другой вектор
- 9. Сплит-вектор в вектор векторов
- 10. Раздвигая вектор в другой вектор
- 11. Пространственный вектор, цветной вектор
- 12. Как вернуть вектор java
- 13. Вектор Сортировка JAVA
- 14. граф вектор вхождений Java
- 15. Java - вектор бинарных флагов
- 16. Java - вектор векторов в буфер
- 17. Вставка нуля в вектор Java
- 18. Динамический вектор объектов в java
- 19. Итерация через вектор в java
- 20. вектор vs набор в java
- 21. Вектор-вектор умножения создать матрицу
- 22. вектор, указывающий на вектор указателей
- 23. Вектор двойного на вектор байтов
- 24. Присвоить вектор индексацию другой вектор
- 25. питона вектор * вектор ------> матрица
- 26. Найти вектор в вектор в R
- 27. Скопируйте вектор в вектор в OpenCV
- 28. Присвоить вектор детей вектор бабушек
- 29. Как создать вектор Вектор В R
- 30. Merge вектор векторов в единый вектор
OP не требует использования рекурсии. Если он/она просто ищет самый глубокий вектор, он может использовать цикл while и стек. рекурсия si, вероятно, проще, но неверно сказать hhat, что это единственный способ. – atk
Но насколько я знаю в этой ситуации, когда вы меняете контент lastNode в основном, контент самого глубокого вектора не изменяется. Я прав? –
@atk: Мой стандартный ответ на этот вопрос - «использовать стек». Вы можете выбирать между неявным (стек вызовов, с рекурсией) или явным. Это более корректно, чем «рекурсия - единственный способ», и она включает в себя вариант рекурсии. –