I assume you are using dictionary managed tablespaces. You have to wait until all extents are deallocated. The following statement should report the number of extents that are to deallocate:
Index segments and materialized view logs have to be deallocated too, if they exist.
A possible "speed up": Do not truncate but drop the table. Dropping the table will take as long as truncation of the table because the number of extents to release is almost the same. But after starting the drop kill the shadow process of the session that issued the drop (e.g. by kill -9). As far as I remember Oracle handles such a situation in the following way:
the segment of the table is converted in a temporary segments. Its extents are deallocated by a background process (I think it is smon). The table is removed from the dictionary after the killing of the shadow process so a new table with same name and structure can be created even if Oracle hasn't released the temporary segment.