Как вернуться к заголовку односвязного списка после создания его в Java? - PullRequest
2 голосов
/ 17 июня 2019

Я пишу программу, чтобы разделить число на цифры и сохранить цифры в связанном списке в обратном порядке.Но я не могу понять, как вернуть связанный список?

Я пытался создать заголовок ListNode, но в нем не получилось.

public class ListNode {
   int val;
   ListNode next;
   ListNode(int x) { val = x; }
  }

class Solution{
  int sum=123;
  public ListNode sol(){
    answer = new ListNode(0);  
    while (sum > 0) {
     int digit = sum % 10;
     answer= new ListNode(digit);
     answer= answer.next;
     sum /= 10;
                    }
        return //////
  }
}

1 Ответ

3 голосов
/ 17 июня 2019

Здесь:

answer = new ListNode(0);  

Этот экземпляр ListNode является первым элементом и, следовательно, «корнем» вашего списка. Но ваш список только один связан. Вы не можете вернуться к предыдущему элементу! Вы должны помнить, где это началось!

Другими словами, у вас есть два варианта:

  • превратить ваш список в двойной связанный список (так: каждый узел запоминает своего предшественника) или
  • запомните этот корневой узел.

Другими словами: при использовании answer в качестве «движущегося указателя» в вашем списке, вы должны сделать что-то вроде:

root = new ListNode(0); // remember this, it is the start of the list!
answer = root;

И тогда вы должны обеспечить, чтобы root оставался без изменений! Потому что эта ссылка представляет (один и только!) Вход в данные вашего списка. Когда вы теряете это, все потеряно; ​​-)

...