#c
#c
Вопрос:
Итак, я создал функцию удаления для своего списка. Как я могу создать функцию, которая проверяет —
Если первое число списка больше следующего, если да, то удаляет его и перемещает обратно?
Input : 1 3 4 2 4 5 2 1 33
Output: 1 3 2 4 5 1 33
void remove(node *amp;head, node *amp;last){
if(isempty(head)){
cout << " Saraksts ir tuksh!"<<endl;
} else if (head ==last) {
delete head;
head == NULL;
last == NULL;
} else {
node * temp = head;
head = head->next;
delete temp;
}
}
Комментарии:
1. Исправлены отступы и некоторые формулировки. Примечание — Добавлены закрывающие фигурные скобки.
2. Непонятно, что вы пытаетесь сделать, во вводимом первом списке есть номер
1
, который не больше следующего (который есть3
), но все равно номер удаляется из списка. Почему это произошло?3.
head == NULL;
должно бытьhead = NULL;
, то же самое дляlast
.
Ответ №1:
Для односвязных списков вы должны поддерживать указатель на предыдущий узел. Таким образом, вы можете сравнить данные предыдущего узла с текущим (текущим узлом).
Чтобы изменить порядок, поменяйте местами поля ссылок.
Я рекомендую всегда рисовать изображения узлов при работе со связанными списками, что-то вроде:
--- --- ---
| 5 | --> | 6 | --> | 7 |
--- --- ---