GRASS GIS does it very well using the tools: v.edit (https://grass.osgeo.org/grass73/manuals/v.edit.html) and v.clean (https://grass.osgeo.org/grass73/manuals/v.clean.html)
Both the commands have powerful instruments to perform topology cleaning operations.