2017-07-19 36 views
-4

我基本上構建了一個可以在4個不同方向上傳輸的鏈表。重要概念如下:具有4個指針的節點的遞歸插入函數返回null

  • Node在此方案中的一類,有四個Node指針作爲類成員。
  • DataCoordinates也是類。 Data只是節點將包含的數據。
  • raw_coordinates是新節點應該具有的座標。
  • Position是當前節點的座標。
  • moveNorth,moveSouth,moveEastmoveWest返回反映位置變化的新座標。例如,位置節點可能具有座標(0,0)。 moveNorth取得位置並返回(0,1)。

最後,我想說,我不關心子節點不指向父節點。 (即,如果節點node-> north具有返回到前一個節點的有效節點→南,則不感興趣)。我的函數返回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; 
    } 
} 
+0

你的問題是什麼?你從字面上只發布了你的pgoram的描述。 – Rakete1111

+0

當使用調試器逐步完成代碼時,您觀察到了什麼? – user0042

+0

那麼我不斷收到一個分段錯誤,所以我想知道是否有人可以幫我修復它。 –

回答

0

我會大膽地猜測你if (node == null)分支不工作,你如何打算。

假設compare_coordinates如果當前位置是「您需要的位置」,則返回true,您將立即返回一個新節點。 這不會將新節點添加到您正在構建的網格中,因此下次嘗試訪問該節點時,它將再次生成。

同樣,如果compare_coordinates返回false,看起來你只是放棄搜索 - 我相信你的想法可能會在當前位置添加一個新的「空」節點,然後在該節點上遞歸與當前參數「到你需要的地方」。所有的猜測都沒有,因爲沒有對代碼重要部分的評論和解釋,但是這會導致你的網格永遠不會超出單箇中心節點,這可能會導致引起段錯誤的空指針引用。