【发布时间】:2015-09-28 17:36:44
【问题描述】:
我正在研究从链表中删除节点的迭代删除函数,我认为代码应该可以正常工作。但是当我不能使用“删除”来删除列表的第一个节点时。 代码是: #包括 使用命名空间标准;
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;
}
}
【问题讨论】:
-
贴出不能按预期工作的测试代码
-
@JamesWierzba 是的,如果您选择 1 删除,此代码将不起作用。
-
当您使用调试器时,哪些语句会给您带来问题?
-
在输出中:
if (root == NULL) root = root->next;如果没有根,则获取不存在的根之后的下一项。几乎肯定不是你想做的。 -
Delete_K内存泄漏。
标签: c++ linked-list