There are bitcoin wallet addresses which are actually public keys, right?
The addresses are the hash of the public key.
Every public key has one private key.
There is actually 2^96 private key that corresponds to an address.
There is very little possibility to generate a public and private key of an already used wallet, correct?
Yes. Of an address that is generated by someone else already.
When a user wants to create a bitcoin address, the same addres generator generates a pair of public & private keys. If another user wants to create a random bitcoin addres, the same generator algorithm can generate previous public & private keys once more.
This means, if there is a software (I know actually this exists) which generates random addresses and checks their balance, there is little possibility to find a wallet with balance in it.
This can be another bitcoin stealing algorithm, right?
That's like finding a needle in an ocean of haysack. You can generate the same addresses again if your RNG is flawed and it isn't random. There are easier ways to steal coins than this.
I don't understand how we can sure that our bitcoins are safe in our wallets in such situation?
The probability is really small but there is a chance.
Am I correct?
Yes. Most people don't get the concept of the possibility. If something is possible, it doesn't mean that its remotely likely to happen. Its more likely for me to get struck by a lightning multiple times in consecutive years while sitting on a toilet bowl than anyone ever generating a collision of an address that is generated securely.
Is there any prevention method agains random address generation?
Make sure your address is truly generated randomly. /thread.