Создание связанного списка в Java - PullRequest
0 голосов
/ 20 января 2020

Я добавляю элементы в связанный список, сканируя элементы один за другим, используя a для l oop, но в конце при печати списка появляется 0. Последний узел указывает на ноль, но все же в списке есть один элемент, равный 0. Я предоставляю свой исходный код ниже, а затем вводим

import java.util.Scanner;
import static java.lang.System.out;
class Node{
    int data;
    Node next;
    Node(){
       this.next=null; 
          }
    Node(int data){
        this.data=data;
        this.next=null;
          }
}
public class MyClass{
    public static void main(String args[]) {
        Node head=new Node();
        Node temp=head;
        Scanner sc = new Scanner(System.in);
        int size=sc.nextInt();
        for(int i=1;i<=size;i++){
            temp.data=sc.nextInt();
            temp.next=new Node();
            temp=temp.next;
        }
        temp=null;
        while(head!=null){
            out.print(head.data+" ");
            head=head.next;
        }
    }
  }

Входы: 5 1 2 3 4 5

Ответы [ 3 ]

0 голосов
/ 20 января 2020

Вы создаете головной узел вне l oop и новый узел в нем.
Таким образом, вы получаете 1 дополнительный узел.

Вы можете попробовать следующее:

public static void main(String args[]) {
    Node head=null;
    Node last=null;
    Scanner sc = new Scanner(System.in);
    int size=sc.nextInt();
    for(int i=1;i<=size;i++){
        if (head == null){
            head = new Node();
            last = head;
        } else {
            last.next = new Node();
            last = last.next();
        }
        last.data=sc.nextInt();
    }
    while(head!=null){
        out.print(head.data+" ");
        head=head.next;
    }
}
0 голосов
/ 20 января 2020

Проблема в том, что даже если вы устанавливаете temp = null после выхода из l oop, у вас все еще есть один дополнительный неназначенный узел.

Самое простое решение - удалить знак '=' в Вы для l oop, так что вы выходите из l oop после вашего последнего узла и затем назначаете свое окончательное значение, например:

    for(int i=1;i<size;i++){
        temp.data=sc.nextInt();
        temp.next=new Node();
        temp=temp.next;
    }
    temp.data=sc.nextInt();
0 голосов
/ 20 января 2020

Указатель next в последнем узле связанного списка должен быть нулевым, чтобы обозначить, что это последний узел.

В вашем случае вы сохраняете его 'не нулевым'. В вашем for l oop просто не создавайте экземпляр указателя next, если это последний элемент, который вы читаете.

    for(int i=1;i<=size;i++){
        temp.data=sc.nextInt();
        if(i != size) {
           temp.next=new Node();
           temp=temp.next;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...