创建了一个链表,但是如何在C ++中删除“所有”节点

时间:2018-10-07 17:29:49

标签: c++ linked-list delete-operator

我编写了以下代码来创建链接列表。因此,我想知道如何删除链表的所有节点。而且我还想知道我创建节点并将元素插入其中的方式是正确的方式。

struct node
{
    int val;
    node *next;
};
int main()
{
    node *head, *temp;
    cout << "enter no of elements" << endl;
    int n;
    cin >> n;

    //=============Creating Nodes And Inserting Elements===========//
    for(int i = 0; i < n; i++)
    {
        cout << "enter the element in " << i << "th node" << endl;
        if(i == 0)
        {
            temp = new node(); 
            cin >> temp->val; 
            head = temp;
        }
        else
        {
            temp->next=new node();
            temp=temp->next;
            cin >> temp->val;
        }
    }
    temp->next=NULL;

    //===================Deleting all the nodes=================//


    return 0;
}

4 个答案:

答案 0 :(得分:1)

您通过遍历列表来delete所有节点:

node *temptemp;      // tempory variable to store
                     // the next list nodes address
for (temp = head;    // begin at the head of the list
     temp;           // as long as temp != NULL
     temp = temptemp // the temp->next we stored in the loops body
) {
    temptemp = temp->next;  // remember temp->next cause
    delete temp;            // next is gone now.
}

答案 1 :(得分:0)

您可以通过多种方式创建链表,我将向您展示其中的一种方式:

结构:

struct linkedList {
    int data;         // store data
    linkedList *next; // store a pointer to the next node
} *head; // "head" is a pointer points to the first node

以下功能是创建新节点的简单方法:

void InsertNode(int data){
    linkedList *node = new linkedList;
    node->data = data;
    node->next = head;
    head = node;
}

当您要删除链表中的所有节点时:

void deleteAllNodes(){
    linkedList *temp = head, *next;
    while(temp != NULL){
        next = temp->next;
        delete temp;
        temp = next;
    }
    delete head;
    head = NULL;
}

如果有不清楚的评论。

答案 2 :(得分:0)

使用析构函数

struct node
{
    ~node()
    {
        if (NULL != next)
        {
            delete next;
        }
    }

    int val;
    node *next = NULL; //initialize with NULL
};

现在从您的主要删除头节点开始

int main()
{
    ...
    delete head;
    ...
}

答案 3 :(得分:0)

最明显的问题是,为什么要创建自己的列表,而不使用std::list这样的STL中的内容?您的编码方式更像C,而不是C ++。添加,删除等节点的方法应该是节点结构的成员函数。例如:

struct node
{
    int val;
    node *next;

    explicit node(int val = 0) : val{val}, next{nullptr} {}

    void add_node(node *nodep) {
        node *tail = this;
        while (tail->next != nullptr)
            tail = tail->next;
        tail->next = nodep;
    }

    ~node() {
        delete next;
    }
};

但是最好使用STL中的容器。