Your problem is equal to the problem of finding all connected components of a graph.
So first thing to do is, to convert your list to a graph G(V, E) where V stands for the vertices and E stands for the edges:
V = list
E = {(o1,o2) for all o1,o2 in list| o1.Equals(o2)}
After that make a DFS to find all components
WHILE-EXISTS unvisted node in G DO
component[i] = DFS(G)
END
Of course the components a Graphs itself.
The components are the lists you are looking for and the vertices in the components are the elements of the list.
For your example the graph would look like this

NOTICE: Since you have to compare each object the conversation will take O(n^2).
To find all components will take you O(n). So this algorithm has an asymptotic runtime of O(n^2)
Answer to the comment in your question
Since the conversion of your problem to this graph problem seems correct,
I am pretty sure it is not possible. If you see it as a graph, you simply have to check each node if it is connected with each other node. You also can not stop after you find one equal node, because you maybe will find another node which is equal and by stoping, you would split the connected component.