У меня есть проблема с базовым связанным списком, которую я попытался решить ниже. Я был бы признателен за любые входы в мой подход, правильность алгоритма (и даже стиль кодирования). Проблема вызывает функцию, которая удаляет все вхождения int в круговом связанном списке и возвращает любой узел из списка или NULL (когда список имеет значение null).Удаление узла в круговом связанном списке
Вот некоторый код C++, что я до сих пор:
struct Node{
Node* next;
int data;
};
Node* deleteNode(Node* &node, int num){
if(!node){
return NULL;
}
Node* given = node;
Node* del;
while(node->next != given){
if(node->next->data == num){
del = node->next;
node->next = node->next->next;
delete del;
}
node = node->next;
}
//Check if the first node needs to be deleted, with variable node pointing to last element
if(given->data == num){
node->next = given->next;
delete given;
}
return node;
}
Вы запросили комментарии к стилю, так что вот один. Вы должны создать класс List, а deleteNode должен быть частным членом этого класса. Вы должны думать в терминах интерфейса, который ваш код представляет пользователю вашего кода. Ни один пользователь класса List не хочет или не хочет знать об узлах, они просто хотят добавлять и удалять элементы из своего списка. Посмотрите на std :: list для примера хорошего дизайна. – john