3 つのリンクされたリストがあり、そのうちの 2 つ (headX と headY) は降順で与えられ、関数の仕事はそれらを単一のリスト (headZ) にソートすることです。
なんらかの理由で、アルゴリズムは正常に動作しますが、再帰が完了して戻ると、3 つのポインターは再帰を「戻る」ときに古い値に戻ります。
void SortedMergeRecur(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;
}
SortedMergeRecur(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;
}
SortedMergeRecur(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;
}
}
SortedMergeRecur(headX, headY, headZ);
}
}
これの一部を簡略化できることは知っていますが (headX または headY のいずれかが null の場合にリスト全体を追加するなど)、問題を解決できると思ったので、このように書きましたが、そうではありませんでした....