Здесь:
answer = new ListNode(0);
Этот экземпляр ListNode
является первым элементом и, следовательно, «корнем» вашего списка. Но ваш список только один связан. Вы не можете вернуться к предыдущему элементу! Вы должны помнить, где это началось!
Другими словами, у вас есть два варианта:
- превратить ваш список в двойной связанный список (так: каждый узел запоминает своего предшественника) или
- запомните этот корневой узел.
Другими словами: при использовании answer
в качестве «движущегося указателя» в вашем списке, вы должны сделать что-то вроде:
root = new ListNode(0); // remember this, it is the start of the list!
answer = root;
И тогда вы должны обеспечить, чтобы root
оставался без изменений! Потому что эта ссылка представляет (один и только!) Вход в данные вашего списка. Когда вы теряете это, все потеряно; -)