Я пытаюсь написать программу, которая переворачивает заданный связанный список. Во-первых, я прочитаю число от пользователя и передам его функции, которая преобразует число в 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 являются общедоступными, почему обратный метод не может получить доступ к символу Node? И как должны быть написаны вспомогательные методы на Java, чтобы они обращались к объектам любых классов.
сделать внутренние классы static
@Arnaud Я получил ошибку несовместимых типов: узел не является функциональным интерфейсом




Проблема в том, что ваши классы являются внутренними классами, а экземпляр внутреннего класса может жить только с экземпляром внешнего класса. Вот возможное решение, если вы делаете классы верхнего уровня, все должно быть хорошо (вам также нужно исправить обратный метод)
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;
}
}
Решение не сработало. Я получил ошибку, что «Узел не является функциональным интерфейсом» внутри обратного метода
@GopalaKrishna У вашего обратного метода есть некоторые проблемы, вам нужно их исправить. Это не связано с тем, что классы не найдены.
/Solution.java:57: ошибка: несовместимые типы: Node не является функциональным интерфейсом Node forward = reverse(curr->next); ^ /Solution.java:57: ошибка: переменная curr уже определена в методе reverse(Node) Node forward = reverse(curr->next); Я думаю, что это связано с тем, что метод не находит класс
@GopalaKrishna Да, я знаю. Вам нужно исправить этот метод.
Вам действительно нужен внутренний класс, содержащий внутренний-внутренний класс? Вы бы избавили себя от путаницы, если бы не вложили свои классы.