either way is my code correct ?
Just use ADC. Its faster and simpler.
Your code will join the two registers into one variable yes, but it looks to be doing it in the wrong order.
It looks like ADCH would be read first, then ADCL. (It should be done the other way around)
Since there are two ADC registers and the AVR cpu can only do one 8bit operation at a time its possible that the ADCL/ADCH registers could be updated from an interrupt (or free running mode) right in the middle of you reading them in main().
To stop you getting the high bits from one sample and low bits from another (or vise versa) the AVR will hardware lock the register when it detects you reading ADCL and then unlock it when you read ADCH.
So the correct procedure so to read ADCL first, that way your subsequent ADCH read is guaranteed to be from the same sample.