Мне сложно придумать логику удаления какого-либо узла как из двусвязного, так и из односвязного списка. Я искал в Интернете справку, но не нашел простого примера. Вот что у меня есть:
Двусвязное удаление. dCurrent
- это узел, который мы хотим удалить.
if (dCurrent == dHead){
dHead = dCurrent->next;
dHead->prev = NULL;
}
else if(dCurrent == dTail){
dTail = dCurrent->prev;
dTail->next = NULL;
}
else{
dCurrent->next->prev = dCurrent->prev;
dCurrent->prev->next = dCurrent->next;
}
Вот что у меня есть для односвязного списка. Опять же, sCurrent
- это узел, который нужно удалить. и sPrev = sCurrent->prev
.
if(sPrev == NULL){
sHead = sCurrent->next;
}
else{
sPrev->next = sCurrent->next;
}
Проблема в том, что после удаления набора случайных узлов из обоих списков двусвязный список отображается правильно от головы до хвоста, но не от хвоста к голове. Односвязный список тоже отображается некорректно.