Возврат указателя на определенную точку кругового связного списка

Я работаю над круговым двусвязным списком. Например, у меня есть три значения в нем

1 2 3

и я передаю его в метод, где я вставляю 0 в середине, вот так:

1 0 2 3

Интересно, можно ли как-то вернуть его обратно, но с указателем на это 0 значение вместо стандартного начала на 1 значение? Если нет, то как бы вы сделали указатель «фактической позиции» на этот список, который показывает, где узлы были удалены / вставлены?

//Редактировать

Там я добавляю свой код

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
int allCharCounter = 0;

struct List_node{
int value;
struct List_node *next;
struct List_node *prev;
};void insert(List_node** start, int v){
List_node* newNode = new List_node;
newNode->value = v;

if(*start == NULL){

newNode->next = newNode;
newNode->prev = newNode;
*start = newNode;
}else{
newNode->next = *start;
newNode->prev = (*start)->prev;
(*start)->prev->next = newNode;
(*start)->prev = newNode;
}
}

//This method should insert a node after node where the pointer was
//With value smaller by 1 -> (c-1)
//after insertion pointer should be moved 'c' times
void insertAndMove(List_node** POS){
if((*POS)->next = NULL){
return;
}else{
int c = (*POS)->value;
//cout << c << endl;

List_node* newNode = new List_node;
newNode->value = c-1;

(*POS)->next = newNode;
newNode->prev = *POS;
newNode->next = (*POS)->next;
(*POS)->next->prev = newNode;//List_node* current;
//there I planned to move my list
for(int i = 0; i < c; i++){
//*POS = (*POS)->next;
//cout <<"POS: " << (*POS)->value << endl;
}

}
}int getNumber(){
int c = getchar();
int value = 0;
for(; (c < 48 || c > 57); c = getchar());

for(; c > 47 && c < 58 ; c = getchar()){
value = 10*value+c-'0';
allCharCounter++;
}
return value;
}int main(){

int numberOfOperations = getNumber();
struct List_node* list = NULL;
while(!feof(stdin)){
int number = getNumber();
insert(&list, number);
}insertAndMove(&list);

cout << list->value << endl;

}

Извините, если я не описал проблему и предположения четко. Я уже задавал вопрос, где я это сильно описываю. Должен быть лучший обзор того, чего я хочу достичь:

Самоорганизующаяся последовательность чисел с большим количеством операций над ней — лучшая структура данных

-3

Решение

Если это круговой двусвязный список, то вы можете просто переместить все элементы перед вставленным элементом в конец списка [a1, a2, a3, a4] -> [a1, a2, new, a3, a4] -> [ новый, a3, a4, a1, a2] Указатель будет новым, но это все тот же список.
Надеюсь это будет полезно

0

Другие решения

Было бы достаточно просто сделать заголовок вашего списка указателем на указатель и установить его в качестве нового заголовка списка. С круглым списком следует помнить, что вам нужно следить за немного отправная точка, чтобы вы знали, когда вы прошли весь список, но эта отправная точка сама по себе не должна быть стабильной, если вы знаете, что она может измениться.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector