I'm trying to work out what you're trying to achieve. I can imagine 2 things, but it could be something else.
The first is that you're trying to just represent geographic data (cities contained in states, contained in countries). A user points to a city, which then links to a state and then a country.
The second is that you allow the user to give their address at any of the 3 levels of precision. I.e. they could say which city they live in, or just which state, or even just which country.
If you're trying to do just the first one, then you should get rid of the user -> state and user -> country relationships, and link user to just city. If you need to know which state and/or country a user is in, just join from city to state and/or country.
If you're trying to do the second one, then it looks quite a lot like polymorphic association, so I suggest you read the linked post and see which you think works best for you.
If you're trying to do both, then I think you have 2 options. The first is to keep the schema as it is, but enforce via business logic that exactly one of the address fields on user is non-null. This would avoid the possible problem that a user could point to e.g. a state and a city that is in a different state.
The second is to make it explicit that you've got 3 types of address (all levels, just country+state, just country). This is more expensive in terms of tables, but makes it clearer what's going on i.e. constraints aren't hidden away in business logic.
For the second option you'd have something like this:
Users
@user_id
(remove address fields)
Country
@country_id
(other fields)
State
@state_id
country_id (foreign key)
City
@city_id
state_id (foreign key)
L1_Address
@l1_address_id
country_id (foreign key)
address_id (foreign key)
L2_Address
@l2_address_id
state_id (foreign key)
address_id (foreign key)
L3_Address
@l3_address_id
city_id (foreign key)
address_id (foreign key)
UserAddress
@user_Id
@address_id