#java
Вопрос:
Это код, который изменяет связанный список с помощью стека. Я все понял правильно, создав связанный список и получив ввод от пользователя, но я ошибся в какой-то логике. Я пытаюсь перевернуть связанный список, используя стек, но это только перевернет два числа, если, допустим, я дам три числа. Как мне все сделать правильно?
импорт java.util.*;
class LinkedList{
Node head;
static class Node{`
int data;
Node next;
Node(int d){
this.data = d;
next = null;
}
}
public static LinkedList insert(LinkedList list, int data){
Node new_node = new Node(data);
if(list.head == null){
list.head = new_node;
}
else{
Node last = list.head;
while(last.next != null){
last = last.next;
}
last.next = new_node;
}
return list;
}
public static LinkedList reverse(LinkedList list){
Stack<Integer> stack = new Stack<Integer>();
Node current = list.head;
while(current.next != null){
stack.push(current.data);
current = current.next;
}
while(!stack.isEmpty()){
System.out.println("The reversed list is: " stack.pop());
}
return list;
}
}
public class Main
{
public static void main(String[] args) {
LinkedList l = new LinkedList();
Scanner sc = new Scanner(System.in);
int length = sc.nextInt();
for(int i=1; i<=length; i ){
int number = sc.nextInt();
l.insert(l,number);
}
l.reverse(l);
}
}
Комментарии:
1. изменить
current.next
наcurrent
2. Да! это сработало.
3. Рад помочь…
Ответ №1:
Проблема заключается в вашей обратной функции. При чтении связанного списка ваша логика цикла while пропускает последний элемент.
Правильная функция-это:
public static LinkedList reverse(LinkedList list){
Stack<Integer> stack = new Stack<Integer>();
Node current = list.head;
while(current != null){ // instead of while(current.next != null)
System.out.println("Pushed Data:" current.data);
stack.push(current.data);
current = current.next;
}
System.out.println("The reversed list is: ");
while(!stack.isEmpty()){
System.out.println(stack.pop());
}
return list;
}
Ответ №2:
Все выглядит хорошо, кроме строки while(current.next != null){
, так как здесь вы проверяете наличие следующего узла вместо текущего узла. Поэтому вам нужно изменить эту строку на while(current != null){