Передача объектов вспомогательным методам в Java - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь написать программу, которая переворачивает данный связанный список.Во-первых, я прочитаю число от пользователя и передам его функции, которая преобразует число в LinkedList. Затем я передам связанный список вспомогательной функции, которая обратит данный LinkedList.

Это моя программа:

import java.io.*;
import java.util.*;


public class Solution {

    public class Link {
        Node head;

        public class Node {
            int data;
            Node next;
            Node(int x) {
                data = x;
                next = null;
            } 
        } // End of class Node

        public void printList() { 
            Node n = head; 
            while (n != null) { 
                System.out.print(n.data+" "); 
                n = n.next; 
            } 
        } 

        public void createList(String num) {
            this.head = new Node(num.charAt(0));
            Node prev = head ;
            for(int i = 1; i < num.length(); i++) {
                Node newNode = new Node(num.charAt(i));
                prev.next =  newNode;
                prev =  newNode;
            }
        }
    } // end of class Link

    public Node reverse(Node curr) {
        if (curr == null) return null;
        if(curr.next != null) {
            Node forward = reverse(curr->next);
            curr.next.next = curr ;
            curr.next = null;   
        } else {
            return res;
        }
        return forward;
    }    

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String number1 = sc.next();
        // System.out.println(number1);

        String number2 = sc.next();
        //System.out.println(number2);

        Link first = new Link();
        first.createList(number1);
        first.printList();

        System.out.println("''''''''''");
        Link second = new Link();
        second.createList(number1);
        second.printList();
        System.out.println("''''''''''");

        first.head = reverse(head); 
        first.printList();
        System.out.println("''''''''''");

        second.head = reverse(head);
        second.printList();
        System.out.println("''''''''''");
    }
}

Это ошибка, которую я получаю:

Solution.java:47: error: cannot find symbol
  public Node reverse(Node curr)
                      ^
  symbol:   class Node
  location: class Solution
Solution.java:47: error: cannot find symbol
  public Node reverse(Node curr)
         ^
  symbol:   class Node
  location: class Solution
2 errors

Мой вопрос, хотя и класс Link, и класс Nodeявляются общедоступными, почему метод reverse не может получить доступ к символу Node?И как должны быть написаны вспомогательные методы в Java, чтобы они обращались к объектам любых классов.

1 Ответ

0 голосов
/ 19 марта 2019

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

class Node {
    int data;
    Node next;

    Node(int x) {
        data = x;
        next = null;
    }
}

class Link {

    Node head;

    public void printList() {
        Node n = head;
        while (n != null) {
            System.out.print(n.data + " ");
            n = n.next;
        }
    }

    public void createList(String num) {

        this.head = new Node(num.charAt(0));
        Node prev = head;
        for (int i = 1; i < num.length(); i++) {
            Node newNode = new Node(num.charAt(i));
            prev.next = newNode;
            prev = newNode;
        }
    }
}

public class Solution {

    public Node reverse(Node curr) {
        // to be implemented
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...