class Solution {
public boolean validPath(int numberOfNodes, int[][] edges, int startNode, int endNode) {
List<List<Integer>> graph = new ArrayList<>();
for (int i = 0; i < numberOfNodes; i++) {
graph.add(new ArrayList<>());
}
for (int[] edge : edges) {
int from = edge[0];
int to = edge[1];
graph.get(from).add(to);
graph.get(to).add(from);
}
boolean[] visited = new boolean[numberOfNodes];
return hasPathDFS(graph, visited, startNode, endNode);
}
private boolean hasPathDFS(List<List<Integer>> graph, boolean[] visited, int currentNode, int targetNode) {
if (currentNode == targetNode) {
return true;
}
visited[currentNode] = true;
for (int neighbor : graph.get(currentNode)) {
if (!visited[neighbor]) {
boolean pathExists = hasPathDFS(graph, visited, neighbor, targetNode);
if (pathExists) {
return true;
}
}
}
return false;
}
}