Tarjan's algorithm finds all SCCs in a single DFS pass using discovery times and low-link values. For each node , track two values: disc[v] (when was first discovered) and low[v] (the lowest discovery time reachable from 's subtree, including back edges).
When low[v] = disc[v], node is the root of an SCC. At this point, pop all nodes from the stack until you reach . All popped nodes (including ) form one complete SCC.