1 回答

TA貢獻2021條經驗 獲得超8個贊
您可以將列表副本的實例作為參數傳遞給函數,而不是將列表存儲在字段中。所以你的函數的簽名recursive將如下所示:
public static void recursive(NumberObject object, List<NumberObject> visited)
為了隱藏此實現細節,我建議編寫兩個函數,其中第二個函數僅將空列表傳遞給另一個函數。
但是,我會選擇不同的方法,因為您的新列表會獲取與樹中的條目一樣多的新列表。在以下實現中,每個“樹端”只有一個列表。此外,就像前面的建議一樣,這使您的班級保持無狀態。
static List<NumberObject> findLongestPath(NumberObject currentNode) {
if (currentNode.getConnectedNodes().isEmpty()) {
List<NumberObject> result = new ArrayList<>();
result.add(currentNode);
return result;
}
List<NumberObject> longestPath = currentNode.getConnectedNodes().stream()
.map(PathFinder::findLongestPath)
.max(Comparator.comparing(List::size))
.get();
longestPath.add(currentNode);
return longestPath;
}
添加回答
舉報