簡體   English   中英

從鏈表C ++中刪除節點

[英]Delete node from Linked List C++

我正在研究從鏈表中刪除節點的迭代刪除功能,我認為代碼應該可以正常工作。 但是當我不能使用“刪除”來刪除列表的第一個節點時。 代碼是:#include使用命名空間std;

struct Node
{
    int data;
    Node* next;
};

Node* GetNewNode(int data)
{
    Node* newNode = new Node;
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

Node* Insert(Node *root, int data)
{
    if (root == NULL)
    {
        root = GetNewNode(data);

    }
    else
        root->next = Insert(root->next, data);
    return root;
}

void Delete_k(Node *root, int k)
{

    int i = 0;
    Node* P = new Node;
    if (k == 1)
    {
        P = root;
        root = root->next;
        delete P;

    }
    else
    {
        for (int i = 1; i <= k - 2; i++)
        {
            root = root->next;
        }
        root->next = root->next->next;
    }
}

void Output(Node* root)
{
    if (root == NULL)
    {
        root = root->next;
    }
    while (root != NULL)
    {
        cout << root->data << " ";
        root = root->next;
    }
}

int main()
{
    int n, a, pos;
    Node* root = NULL;
    cout << "Input your list hear: ";
    cin >> n;
    while (n > 0)
    {
        root = Insert(root, n);
        cin >> n;
    }
    Output(root);
    cout << "\nDelete Pos?: ";
    cin >> pos;
    Delete_k(root, pos);
    Output(root);
}

我有這個問題

void Delete_k(Node *root, int k)
{

    int i = 0;
    Node* P = new Node;
    if (k == 1)
    {
        P = root;
        root = root->next;
        delete P;

    }
    else
    {
        for (int i = 1; i <= k - 2; i++)
        {
            root = root->next;
        }
        root->next = root->next->next;
    }
}

問題:

void Delete_k(Node *root, int k)

根目錄中的值通過引用傳遞,但指向它的指針不是。

結果: Delete_k的根是main根的副本。 Delete_K的根目錄被重新指向並刪除。 Main的根現在指向垃圾內存。 結束游戲程序。

解:

提供對根指針的引用,以使其不會被復制。

void Delete_k(Node *& root, int k)

或從Delete_k返回root。

Node * Delete_k(Node * root, int k)
{
    //existing code
    return root;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM