Хорошо, возможно, вам нужно немного улучшить свой код.Во-первых, вам нужен список.Итак, начнем с этого.
public class MyLinkedList {
public Node *head = NULL;
}
заголовок указывает на начало списка.
Теперь основной алгоритм для insertAfter прост:
- Найтиузел, содержащий значение «куда вставлять после»
- Создайте новый узел и вставьте его после.
Мило, да?
void insertAfter(int beforeData, int valueToInsert) {
Node *ptr = head;
Node *lastPtr = NULL;
while (ptr != NULL && ptr->value != beforeData) {
lastPtr = ptr;
ptr = ptr->next;
}
// At this point, ptr COULD be null, if the data is never found.
// Insertion is at the end, and lastPtr helps with that.
Node * newNode = new Node(valueToInsert);
if (ptr == NULL) {
# At the end of the list.
if (lastPtr != NULL) {
lastPtr->next = newNode;
newNode->previous = lastPtr;
}
else {
// The entire list is null
head = newNode;
}
}
else {
// ptr points to the data we were searching for, so insert after.
newNode->next = ptr->next;
newNode->previous = ptr;
ptr->next = newNode;
}
}
Тогда, вы можете сделать что-то вроде этого:
MyLinkedList list;
list.insertAfter(0, 1);
list.insertAfter(1, 17);
list.insertAfter(1, 10);
Если вы затем сбросите содержимое списка (вам нужно будет выполнить итерацию от головы до следующих указателей), вы увидите, что список содержит в порядке1, 10, 17.