Связанный список получает ошибку нулевой точки при попытке доступа к своим данным - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно обратить вспять элементы связанного списка, для которого я использовал следующий код, однако я получаю вывод как Для ввода: 5

1 2 3 4 5

Ваш вывод:

curr имеет данные 1

1 Ожидаемый результат: 5 4 3 2 1

Код:

 Node reverseList(Node head)
   {

    Node curr=null;
    Node node = head;
    Node next=null;
    while(node!=null){
        next = curr;
        curr = node;
        System.out.println("curr has data " + node.data);
        curr.next = next; 

        node = node.next;
        //System.out,println(node.data)

    }
    return curr;

   }

Когда я пытаюсь распечатать данные после изменения узла на node.next, это дает нулевую ошибку! постскриптум это функциональная проблема

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Проблема с назначением текущих и следующих значений

Node reverseList(Node node) { 
    Node prev = null; 
    Node current = node; 
    Node next = null; 
    while (current != null) { 
        next = current.next; 
        current.next = prev; 
        prev = current; 
        current = next; 
    } 
    node = prev; 
    return node; 
} 
0 голосов
/ 03 июля 2019

node на самом деле null после одной итерации.

Я прокомментировал некоторые из ваших кодов, чтобы объяснить:

Node reverseList(Node head) {
 Node curr = null;
 Node node = head;
 Node next = null;
 while (node) {
  next = curr; // Here, curr is null, so next = null
  curr = node;
  System.out.println("curr has data " + node.data);
  curr.next = next; // You are here doing 'curr.next = null' (see before)

  node = node.next;
 }
 return curr;
}

Вот решение от https://www.geeksforgeeks.org/reverse-a-linked-list/чтобы перевернуть связанный список:

Node reverse(Node node) {
 Node prev = null;
 Node current = node;
 Node next = null;
 while (current != null) {
  next = current.next;
  current.next = prev;
  prev = current;
  current = next;
 }
 node = prev;
 return node;
}

Кстати, если вы еще этого не сделали, взгляните на объект ArrayList, который позволяет вам просматривать список и в обратном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...