A 36-year-old man has been charged with assault after a one-punch attack in Sydney's eastern suburbs that left a man in hospital with head injuries.

Police say that, just before midnight on Sunday, the 36-year-old approached a 38-year-old man outside a hotel on Coogee Bay Road and punched him, causing him to fall on the road.

The victim was treated by paramedics for cuts to the head before being taken to St Vincent's Hospital, where he is in a stable condition.

Police stopped a taxi nearby a short time later and arrested the 36-year-old passenger, who was taken to Maroubra police station.