[英]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.