具有4个指针的Node的递归插入函数返回null

时间:2017-07-19 18:53:23

标签: c++ recursion linked-list

我正在构建一个可以在4个不同方向上行进的链接列表。重要概念如下:

  • Node是此方案中的一个类,其中有四个Node指针作为类成员。
  • DataCoordinates也是课程。 Data只是节点将包含的数据。
  • raw_coordinates是新节点应具有的坐标。
  • Position是当前节点的坐标。
  • moveNorthmoveSouthmoveEastmoveWest会返回反映位置变化的新坐标。例如,位置节点可能具有坐标(0,0)。 moveNorth获取位置并返回(0,1)。

最后,我想说明我并不关心子节点没有指向父节点。 (即如果节点,node-> north,有一个有效的node-> south返回到前一个节点,则不感兴趣。)

问题是我的函数返回null。这是我的代码:

Node* Map::insertNode(Node *node, Data raw_data, Coordinates raw_coordinates, Coordinates position)
{
    if (node == NULL)
    {
        if (compare_coordinates(raw_coordinates, position))
        {
            return (newNode(raw_data, raw_coordinates));
        }
        else
        {
            return node;
        }
    }
    else
    {
        if (insertNode(node->north,raw_data, raw_coordinates, moveNorth(position)) != NULL)
        {
            node->north = insertNode(node->north, raw_data, raw_coordinates, moveNorth(position));
        }
        else if (insertNode(node->south,raw_data, raw_coordinates, moveSouth(position)) != NULL)
        {
            node->south = insertNode(node->south, raw_data, raw_coordinates, moveSouth(position));
        }
        else if (insertNode(node->west, raw_data, raw_coordinates, moveWest(position)) != NULL)
        {
            node->west = insertNode(node->west, raw_data, raw_coordinates, moveWest(position));
        }
        else if (insertNode(node->east, raw_data, raw_coordinates, moveEast(position)) != NULL)
        {
            node->east = insertNode(node->east, raw_data, raw_coordinates, moveEast(position));
        }

        return node;
    }
}

1 个答案:

答案 0 :(得分:0)

我猜测你的if (node == null)分支机构没有按你的意图工作。

假设 compare_coordinates如果当前位置是“您需要的位置”,则返回true,您将立即返回一个新节点。 这不会将新节点添加到您正在构建的网格中,因此下次您尝试访问该节点时,它将再次生成。

同样,如果compare_coordinates返回false,看起来你只是放弃了搜索 - 我相信你想到的方法可能会在当前位置添加一个新的“空”节点,然后递归在该节点上使用当前参数“到达您需要的位置”。

所有推测,因为没有对代码的重要部分没有评论和解释,但这会导致您的网格永远不会扩展到单个中心节点之外,这可能导致空指针解引用导致段错误。