通过递归 - c++ 将排序的两个链表合并到第三个链表中
Merge sort two linked list into a third linked list via recursion - c++
所以基本上,我必须将两个链表(作为参数传递)合并到第三个链表(也作为参数传入)中 - 但是在函数结束时,新列表仍然必须排序,其他链表必须为空。我很确定我很接近,但由于某种原因,我认为第三个列表的计算不正确。如果有人能看一看并很快告诉我我错在哪里,那将是很棒的,考虑到我不擅长递归。最后,headX 和 headY 都应该是空的,它们的所有项目都按 headZ 排序。但是,在函数完成后,headZ 不正确(尽管我不确定为什么)。
void sortedMergeRecur(Node* &headX, Node* &headY, Node* &headZ)
{
// we can assume that both headx and heady are sorted linkedlists
// first establish base case or when to stop
if((headX == 0) && (headY != 0))
{
// x is empty, but y is not
headZ = headY;
headY = 0;
return;
}
else if((headY == 0) && (headX != 0))
{
// y is empty, but x is not
headZ = headX;
headX = 0;
return;
}
else if((headY == 0) && (headX == 0))
{
// if they're both empty, we don't need to add anything z
headZ = 0;
return;
}
// Pick either x or y to add
if (headX->data <= headY->data)
{
headZ = headX;
SortedMergeRecur(headX->link, headY, headZ->link);
headX = 0;
}
else // if(headX->data > headY->data)
{
headZ = headY;
SortedMergeRecur(headX, headY->link, headZ->link);
headY = 0;
}
return;
}
更新 - 您需要在合并排序期间前进 headX 或 headY。此外,还可以简化空列表检查。这个例子似乎有效:
void SortedMergeRecur(Node* &headX, Node* &headY, Node* &headZ)
{
// assume that both headX and headY are sorted linkedlists
// check for empty lists
if(headX == 0)
{
headZ = headY;
headY = 0;
return;
}
if(headY == 0)
{
headZ = headX;
headX = 0;
return;
}
// move smaller of X,Y to Z
if (headX->data <= headY->data)
{
headZ = headX;
headX = headX->link;
SortedMergeRecur(headX, headY, headZ->link);
}
else
{
headZ = headY;
headY = headY->link;
SortedMergeRecur(headX, headY, headZ->link);
}
return;
}
相关文章:
- 如何使用模板元编程在自由函数C++链接两个不相关的类
- 链接两个使用 c++ 构建的库_static
- 当我链接两个静态C++库时,我可以在两个主函数库中有两个主要功能吗?
- 在链接到两个 exe 的 dll 中共享全局变量
- 如何链接两个LLVM位码模块?
- 在没有额外代码的情况下链接两个独立类的最通用方法是什么?
- 在 Linux 上的 Visual Studio 中链接两个项目
- 在同一C++项目中链接两个不同版本的 protobuf 库
- 如何链接两个ArUco标记的姿势
- CMakeLists配置以链接两个C++项目
- 如何静态链接到两个版本的 xerces-c(或任何与此相关的库)
- Xcode 不链接两个结构
- 如何在 C/C++ 中链接两个 .so
- 链接两个具有相同函数签名的强函数符号的结果使用 G++ 以及原因
- 在 Visual Studio 解决方案中链接两个项目
- 链接两个枚举类型成员
- OpenGL - 链接两个纹理不起作用
- 我如何使用cmake链接两个库到我的程序
- 当链接到两个第三方共享库时,c++程序崩溃
- 在链接两个对象文件时,使用#ifndef防止定义一个函数两次