Another idea would be the following : instead of moving the position of the object, each slot would have different animation which adapts when you collide an object. Each object has an ID. If you collide an object, this one is destroyed. On destroyed, you figure out how to pick the ID of this very object.
Then you launch a for loop which looks for the first slot being empty. Once it's found, you set the animation you wish to the slot depending on the ID of the collided object.
However, if you do so, all empty slot will be filled with te new object. To avoid this issue, you can add a test in the "for loop" to stop at the moment it reaches the first empty slot. For instance a boolean "isSearching" which is true until it finds an empty slot.