У меня возникла небольшая проблема с реализацией моего циклически связанного списка. Я работаю над проблемой, которая требует, чтобы вы самостоятельно реализовали любой ADT. Кажется, у меня все в порядке с добавлением узлов в список, однако я нахожусь на незнакомой территории, когда дело доходит до удаления. Я включил первые два метода удаления, чтобы дать вам представление о том, к чему я клоню: как мне удалить последний узел в списке?
public class LinkedList {
private Node head;
private Node tail;
private int size = 0;
LinkedList() {
head = null;
current = null;
previous = null;
tail = null;
size = 0;
}
//checks if list is empty
public boolean isEmpty() {
return head == null;
}
//add new node to front of circularly linked list
public void addToFront(E x) {
if (head == null) {
head = new Node(x);
} else {
Node n = new Node(x);
x.next() = head;
head = x;
}
}
public void addtoMiddle(E x) {
x.next = current.next();
current.next = x;
size = size + 1;
}
public void addToEnd(E x) {
x.next = null;
tail.next() = x;
tail = x;
size = size + 1;
}
public void removeFirst(E x) {
if (head = null) {
System.out.println("Error! List is empty!");
} else {
head = current.next();
size = size + 1;
}
}
public void removeMiddle(E x) {
previous.next() = current.next();
current.next() = null;
size = size + 1;
}
Node
? Предполагая, что у вас есть ссылки в обоих направлениях, удаление последнего узла просто потребует от вас вернуться назад от головы. Не должно быть слишком большой головной боли. - Если у вас есть ссылки только в одном направлении, зацикливайте, пока не наткнетесь на узел,next
которого указывает на голову. Тогда это ваш последний узел. - person Thomas   schedule 30.09.2015E x
в методах удаления. - person laune   schedule 30.09.2015