How to estimate exactly gasLimit used in a transaction without token approved before

Hello,

Is there a way to estimate gas for a contract without calling the approve function? I have a smart contract for transferring tokens when I approve the contract to spend I can successfully estimate gas but If I don't then gas estimate reverts. I'm using the usual estimate gas in web3 as per the snippet below

const gas = await mycontract.methods.tokentransfer(address,amount,tokenaddress).estimateGas({ from: sender });

Any ideas?

Without approving, the transaction reverts.
And you cannot estimate the gas cost of a reverting transaction.
Even if you could, it would only be the gas cost up to the point of revert, which you're probably not interested in knowing anyway.
It might help if you provide some more details on why you want to transfer without approving in the first place, as there's a good chance that you're trying to solve a "problem" which doesn't need to be solved.