У меня есть эта функция с именем DeleteData
, которую я использую для удаления любого узла из моего связанного списка.
void DeleteData(Node *node, int key)
{
Node temp;
//If key is in the first node itself
if (node != NULL && node->read_data() == key)
{
temp = *node->next;
node->next = NULL;
delete node;
cout << "New List";
// It's just a function that reads all data from the linked list given the head reference.
ListTraverse(&temp);
return;
}
//If key is not in first node
else if (node->read_data() != key)
{
while (node != NULL && node->read_data() != key)
{
// Function to loop thorugh all the nodes
}
if (node->read_data() == key)
{
//Steps to do, If node is found
}
}
else
{
cout<<"Invalid Search key";
}
}
Этот DeleteData
принимает два аргумента, 1. ссылка на 1-й узел, 2. Ключ. Мне нужно удалить узел, значением которого является соответствующий ключ. Я успешно сделал 1-ю часть, т. Е. Когда ключ находится только в 1-м узле, но я не могу спроектировать его так, чтобы, если ключ не найден в 1-м узле, он должен был искать оставшиеся узлы.
Node — это класс C++, имеющий это определение
class Node
{
private:
int data;
public:
Node *next;
void push_data(int x)
{
data = x;
}
int read_data()
{
return data;
}
};
void DeleteData(Node *node, int key)
делает невозможным удаление первого узла. Вам нужно что-то вродеvoid DeleteData(Node *&node, int key)
, чтобы вы могли обновить вызывающую программу новым первым узлом. - person user4581301   schedule 13.01.2021