to me I would see it as a 1 to many relationship.
You need to think about the functionality (flow). So are you going to have an excepted answer like stack exchange and microsoft? or are you just going to have answers....
this will determin the layout of data and retrival. Next is how are you going to pull the data? would it be on a question rather than a user as a user can have multiple questions but there could be multiple same questions from the same user or users.
having a list you need to check on two things... the question and the owner for retrival and have a checkup on a question being asked so you dont have repeating questions.
1) create two lists for questions and answers
2) create list for each answer and their questions
say i have 500 questions... option two would generate 500 lists as each list is a question (first row) and within each list question you would have multiple answers (rows), then you have one accepted answer (field).
option one is best(your option 2), You could have a single list for all questions, each row represents a single answer. You then create another list that represent all answers for all questions. When you create a question it automatically creates a unique id. You could use this Unique id within a custom column within the answers list..... any answer that is created under that question would be populated with that unique id. So when you query the answers list for a given question you would use the question id to return all answers. You then create a custom column within the answers list called accepted. Any accepted answer would be yes or true as the accepted answer!
to the point.
list 1 = questions
think how your gonna retrive the question and checkup on repeating question before they ask
list 2 = answers
user id from list 1 to get all answers from a unique column in list 2. List 2 will have another column that will specifiy if the answer has been accepted.
the rest ill let you figuer it out ;)