removeNode method

Graph removeNode(
  1. Node node
)

Removes the given node from the graph and all edges which are connected with this node.

Implementation

Graph removeNode(Node node ) {
	_nodes.remove( node.index );

	if ( digraph == false ) {
		// if the graph is not directed, remove all edges leading to this node
		final edges = _edges[node.index];

		for ( final edge in edges! ) {
			final edgesOfNeighbor = _edges[edge.to];

			for ( int i = ( (edgesOfNeighbor?.length ?? 0) - 1 ); i >= 0; i -- ) {
				final edgeNeighbor = edgesOfNeighbor![ i ];

				if ( edgeNeighbor.to == node.index ) {
					final index = edgesOfNeighbor.indexOf( edgeNeighbor );
					edgesOfNeighbor.removeAt( index );

					break;
				}
			}
		}
	}
    else {
		// if the graph is directed, remove the edges the slow way
		for ( final edges in _edges.values ) {
			for ( int i = ( edges.length - 1 ); i >= 0; i -- ) {
				final edge = edges[ i ];

				if ( !hasNode( edge.to ) || !hasNode( edge.from ) ) {
					final index = edges.indexOf( edge );
					edges.removeAt( index );
				}
			}
		}
	}

	// delete edge list of node (edges leading from this node)
	_edges.remove( node.index );
	return this;
}