I have custom button on Opportunity.On click of button I need to pre populate values on contract with values from oppty.Once Contract is saved I need to populate Contract lookup on Oppty with the newly created contract Id.Is there any other way other than overriding button with visual force/controller.what is the best approach for this ?
URL Hacking is only going to help with populating values on the newly created record, it's not capable of updating related records.
You're only real option for this is to use a trigger that updates the lookup on the opportunity whenever the contract is created.
As an aside, you might take this a step back and see if you really need that extra lookup. The contract details are already available as a child relationship to the opportunity and chances are good that you whatever you need that lookup from the opportunity to the contract for could be accomplished with alternate methods (please ask as a separate question).