Для задач программирования мне нужно написать метод, который удалит средний узел связанного списка, только если список содержит нечетное количество узлов.Он должен вернуть информацию в среднем узле, если он существует;и ноль в противном случае.
Например, если список a-> b-> c-> d-> e, c удаляется.И если список a-> b-> c-> d, ничего не удаляется.Задача запрещает использование переменной counter или логического значения.
Я знаю, что это нужно решить, используя только один цикл.Я знаю, что должен использовать временный узел для прохождения цикла, но я не уверен, как.У меня проблемы с проверкой количества узлов в списке без использования счетчика и выяснения, как переместить указатель на узел посередине.
public class DynamicNode {
// the data in the node
private Object info;
// refers to the next node on the list
private DynamicNode next;
/**
* Each time an object of type DynamicNode is instantiated, the constructor places the object
* being stored in the node into the info field and "points" the next field to the next node in
* the list.
*/
public DynamicNode(Object x, DynamicNode n) {
info = x;
next = n;
}
/**
* Extracts the object stored in the node.
*/
public Object getInfo() {
return info;
}
/**
* "Points" to the node following the current node.
*/
public DynamicNode getNext() {
return next;
}
/**
* Inserts the object into the node.
*/
public void setInfo(Object x) {
info = x;
}
/**
* Sets the next field to the next node in the list.
*/
public void setNext(DynamicNode n) {
next = n;
}
public String toString() {
return info.toString();
}
}
class DynamicList {
/**
* Head of the list.
*/
private DynamicNode head;
/**
* Instantiates a new list and initializes its head pointer to null.
*/
public DynamicList() {
head = null;
}
public DynamicList(DynamicNode head) {
this.head = head;
}
/**
* Gets the head of the list.
*/
public DynamicNode getList() {
return head;
}
// The problem!
public Object deleteMid() {
}
}