C ++, удалить узел, используя идентификатор - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть класс-член, где я хочу удалить узел, используя идентификатор.Я создал структуру для связанного списка.все остальные функции работают нормально, но я не могу удалить узел в заданной позиции.Он отлично работает, когда я добавляю элемент и когда я показываю его, но когда дело доходит до удаления узла, он не работает.

#include <iostream>

#include <string>

class member {

public:
    struct nodetype {
        int id;
        string name;
        string password;
        string type;
        nodetype* next;
    };

    member() {
        start = NULL;
    }

    void addMember(int x, string n, string p, string t) {
        nodetype* temp = new nodetype();
        temp->id = x;
        temp->name = n;
        temp->password = p;
        temp->type = t;
        temp->next = start;
        start = temp;
    }
    void showMember()
    {

        nodetype* temp = start;
        while (temp != NULL)
        {
            cout << temp->id << "\t" << temp->name << "\t" << temp->type << "\t" << temp->password << endl;
            temp = temp->next;
        }
    }

    void deleteMember(int x)
    {
        nodetype* tmp = start;

        while (tmp != NULL)
        {
            if (tmp->id == x)
            {
                nodetype* del = tmp;
                start->next = tmp->next;
                delete del;
            }
        }
    }
private:
    nodetype* start;
};

int main()
{
    member obj;

    obj.addMember(1,"joe","123","student");
    obj.addMember(2,"john","456","staff");
    obj.deleteMember(2);
    obj.showMember();


}

1 Ответ

0 голосов
/ 17 декабря 2018

Прежде всего, в функции deleteMember вы не перемещаете tmp вперед. Вы можете сделать это как -

void deleteMember(int x)
{
    nodetype* tmp = start;
    nodetype* prv = NULL;
    while (tmp != NULL)
    {
        if (tmp->id == x)
        {
           if(prv != NULL)
           {
                prv->next=tmp->next;
           }
           else
           {
                start=tmp->next;
           }
           delete tmp;
           break;
        }
        prv=tmp;
        tmp=tmp->next;
    }
}
...