Двусвязный список. Перед элементами кратными 5 вставить элемент "5"

Вообще само задание - Перед элементами кратными 5 нужно вставить цифру 5.

Вот код структуры

typedef struct SNum
{
    int      num;  
    SNum *   next;      
    SNum *   prew; 
} TNum;
TNum  * Start;

Как это можно реализовать? Просто не могу понять как элемент который вставился в список связать со следующим и предыдущим.


Ответы (1 шт):

Автор решения: Герман Борисов

Перебираем поочередно все элементы.

Если у очередного num кратно 5, то

Создать новый элемент.

У нового элемента next установить на текущий, prev на prev текущего.

У текущего prev установить на новый.

Если prev нового заполнен (старое значение prev текущего), то обратиться к тому элементу и установить его next на новый элемент.

TNum *wp=Start;
int a =5;
while (wp!=NULL) {
  if (wp->num%5==0 ) {
    TNum *pNew = new TNum;
    pNew->num = a; // 5 у нового.
    pNew->next = wp; // У нового элемента next установить на текущий
    pNew->prew = wp->prew;
    wp->prew = pNew;
    // wp->num = a; текущий не трогаем.
    if (pNew->prew !=NULL) { //Если prev текущего заполнен
      pNew->prew->next = pNew; // то обратиться к тому элементу и установить его next на новый элемент.
    }
    if (wp = Start) { // Если обрабатываем первый элемент,
      Start = pNew; // то первым становится новый.
    }        
  }
  wp = wp->next;
}
→ Ссылка