#java #linked-list
#java #связанный список
Вопрос:
У меня возникли небольшие проблемы с небольшим действием Java, которое связано с поиском и удалением связанного списка.
Вот проблемы:
- добавьте меню в метод main для обработки добавления в head, удаления из head и отображения связанного списка.
- Затем добавьте пункт меню для удаления определенного элемента в списке и удалите его (таким образом, запросите у пользователя строку для удаления — а затем найдите ее в связанном списке и удалите этот элемент из списка).
Вот классы:
public class LLNode {
private String data;
private LLNode next;
public LLNode() {
this.data = null;
this.next = null;
}
public LLNode (String newData) {
this.data = (newData);
this.next = null;
}
public void updateNode (LLNode nextOne) {
this.next = nextOne;
}
public String toString () {
return this.data;
}
public LLNode getNext() {
return this.next;
}
}
public class LList {
private LLNode head;
public LList() {
head = null;
}
public void addAtHead (String newData) {
LLNode newNode = new LLNode (newData);
newNode.updateNode(head);
head = newNode;
}
public void display() {
LLNode temp = head;
while (temp != null) {
System.out.println (temp);
temp = temp.getNext();
}
}
public LLNode deleteAtHead ( ) {
LLNode removedOne = head;
head = head.getNext();
return removedOne;
}
}
public class LinkedListExample {
public static void main(String[] args) {
LList list = new LList();
list.addAtHead("Bob");
list.addAtHead("Tom");
System.out.println("The list is ");
list.display();
LLNode removedOne = list.deleteAtHead();
System.out.println("After delete, the list new is ");
list.display();
System.out.println("The one that was deleted is..." removedOne);
}
}
Комментарии:
1. С какой проблемой вы столкнулись?
2. Что вы пробовали? Мы здесь не для того, чтобы выполнять ваше упражнение 😉
3. В чем конкретно проблема? Ваш код выглядит нормально, за исключением того, что методы
deleteAtHead
иaddAtHead
могли бы извлечь выгоду из проверки на нуль. Я предполагаю, что этот код является домашним заданием, поскольку Java имеет встроенныйLinkedList
.4. Это не проблемы, это назначения. Мы не делаем вашу домашнюю работу.
Ответ №1:
- Для создания меню я бы рекомендовал использовать цикл while. Вы хотите использовать какой-то сканер, который проверяет правильность ввода и проверяет ввод меню.
{
public void main(String[] args) {
string input;
Scanner n = new Scanner(System.in);
while (!(input.equals("exit")) {
System.out.println("menu item 1");
System.out.println("menu item 2");
System.out.println("etc");
input = n.nextLine();
switch (input) {
case "menu 1": //do whatever menu 1 is
case "menu 2": //do whatever menu 2 is
case "exit": //exit // save whatever
default: System.out.println("message not understood");
}
}
Это метод contains. Это должно дать вам четкое представление о том, как найти элемент в linkedlist и как его удалить. (Я оставлю это вам, поскольку это относительно просто и вам нужно научиться).
public boolean contains(String str) {
Node ref;
while (ref != null)
ref = ref.next;
if (ref.data == str) {
return true;
}
return false;
}
Комментарии:
1. Другие примечания: конструкторы по умолчанию, которые устанавливают значения, к которым вы бы обращались как к нулевым, являются плохими. Установите для поля данных значение «» (пустая строка). В этом случае вы можете возразить «ну, класс Node является закрытым, пользователь не может получить к нему доступ» ну, тогда зачем вам конструктор по умолчанию? Либо измените конструктор по умолчанию, либо удалите его. (Это просто плохая практика)