gpt4 book ai didi

c++ - 从链表C++中删除节点

转载 作者:行者123 更新时间:2023-11-28 02:20:08 24 4
gpt4 key购买 nike

我正在研究从链表中删除节点的迭代删除函数,我认为代码应该可以正常工作。但是当我不能使用“删除”来删除列表的第一个节点时。代码是: #包括 使用命名空间标准;

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)

root 的值是通过引用传递的,但指向它的指针不是。

结果: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;
}

关于c++ - 从链表C++中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com