C++指针恢复
C++ pointers reverting back
有 3 个链表,其中 2 个已经按顺序排列。2 个链表被分类到 3rd( headZ
)。如果我像已经这样将headZ
作为指针传递,它会在函数退出时恢复为空列表。如果我通过引用传递,它会退出,headZ
只包含 1 个数字。我不知道如何让它工作。
void SortedRecur(Node*& headX, Node*& headY, Node* headZ){
if (headX == NULL && headY == NULL)
return;
else if (headX == NULL && headY != NULL)
{
if (headZ == 0)
{
headZ = headY;
headY = headY->link;
headZ->link = NULL;
}
else
{
headZ->link = headY;
headY = headY->link;
headZ = headZ->link;
headZ->link = NULL;
}
SortedRecur(headX, headY, headZ);
}
else if (headX != NULL && headY == NULL)
{
if (headZ == 0)
{
headZ = headX;
headX = headX->link;
headZ->link = NULL;
}
else
{
headZ->link = headX;
headX = headX->link;
headZ = headZ->link;
headZ->link = NULL;
}
SortedRecur(headX, headY, headZ);
}
if (headX != NULL && headY != NULL)
{
if (headX->data > headY->data)
{
if (headZ == NULL)
{
headZ = headY;
headY = headY->link;
headZ->link = NULL;
}
else
{
headZ->link = headY;
headY = headY->link;
headZ = headZ->link;
headZ->link = NULL;
}
}
else
{
if (headZ == NULL)
{
headZ = headX;
headX = headX->link;
headZ->link = NULL;
}
else
{
headZ->link = headX;
headX = headX->link;
headZ = headZ->link;
headZ->link = NULL;
}
}
SortedRecur(headX, headY, headZ);
}
cout << "ListZ: "; ShowAll(cout, headZ);} //Test contents of headZ
如果不传递 headZ 作为引用,则 headZ 指针在传递给此函数时不会更改。例如,如果您执行以下操作:
Node* resultHead = NULL;
Node* inputA = GetInitialAList(); // (hypothetical function to get the inital value)
Node* inputB = GetInitialBList();
SortedRecur(inputA, inputB, resultHead);
那么 resultHead 的值将保持不变,因此它仍然是 NULL。另一方面,如果您将 SortedRecur 更改为以 headZ 作为引用,那么 headZ 的最终值将指向列表中的最后一个元素,因为每次添加新元素时,您也会headZ = headZ->link;
- 因此 headZ 始终指向列表的末尾。列表的开头丢失。
我认为解决问题的最简单方法是保留您当前的 SortedRecur
实现,但不要为 headZ 传递 NULL 指针,而是使用指向实际节点的初始值。这样,SortedRecur 可以将排序列表添加到 headZ 的末尾,并且初始 headZ 指针保持不变并不重要。例如,这里有一个笨拙的方法:
Node dummyNode;
dummyNode.link = NULL;
Node* resultHead = &dummyNode;
Node* inputA = GetInitialAList(); // (hypothetical function to get the inital value)
Node* inputB = GetInitialBList();
SortedRecur(inputA, inputB, resultHead);
// At this point, the value of resultHead is unchanged,
// but the dummyNode now points to the sorted list.
// All we have to do now is discard the dummyNode.
resultHead = dummyNode.link;
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 通过指针恢复对数组的引用.UB与否?
- C++指针恢复
- 无法从映射中恢复指向成员函数的指针
- 无法将指针恢复为零
- C ++:给定指针类型,如何恢复指针类型
- 如何恢复我的鼠标指针时,它不可见的QWSSERVER::SetCursorVisible(false)
- 从boost::any中恢复函数指针
- 从指针到成员恢复父节点
- C++:在回调中恢复对象指针(API 不支持user_data指针)