Недавно я ответил на тест "Мой онлайн-интервью", в котором меня попросили следующий вопрос
Конструкция TrainComposition строится путем крепления и отсоединения вагонов с левой и правой сторон.
Например, если мы начнем с прикрепления вагона 7 слева, а затем с помощью вагона 13, снова слева, мы получим композицию из двух вагонов (13 и 7 слева направо). Теперь первый вагон, который может быть отделен от правой, равен 7, а первый, который можно отделить слева, - 13. Внедрить TrainComposition, который моделирует эту проблему.
Я использовал дважды связанный список для решения проблемы
class Node
{
protected int data;
protected Node next, prev;
/* Constructor */
public Node()
{
next = null;
prev = null;
data = 0;
}
/* Constructor */
public Node(int d, Node n, Node p)
{
data = d;
next = n;
prev = p;
}
/* Function to set link to next node */
public void setLinkNext(Node n) {
next = n;
}
/* Function to set link to previous node */
public void setLinkPrev(Node p) {
prev = p;
}
/* Funtion to get link to next node */
public Node getLinkNext() {
return next;
}
/* Function to get link to previous node */
public Node getLinkPrev() {
return prev;
}
/* Function to set data to node */
public void setData(int d) {
data = d;
}
/* Function to get data from node */
public int getData() {
return data;
}
}
public class SortedSearch {
protected Node start;
protected Node end;
public int size;
/* Constructor */
public SortedSearch()
{
start = null;
end = null;
size = 0;
}
public boolean isEmpty()
{
return start == null;
}
public int getSize()
{
return size;
}
public void attachWagonFromLeft(int wagonId) {
Node nptr = new Node(wagonId, null, null);
if (start == null)
{
start = nptr;
end = start;
}
else
{
start.setLinkPrev(nptr);
nptr.setLinkNext(start);
start = nptr;
}
size++;
}
public void attachWagonFromRight(int wagonId) {
Node nptr = new Node(wagonId, null, null);
if (start == null)
{
start = nptr;
end = start;
}
else
{
nptr.setLinkPrev(end);
end.setLinkNext(nptr);
end = nptr;
}
size++;
}
public int detachWagonFromLeft() {
int value=0;
if (size == 1)
{
value = start.getData();
start = null;
end = null;
size = 0;
return value;
}
value = start.getData();
start = start.getLinkNext();
start.setLinkPrev(null);
size--;
return value;
}
public int detachWagonFromRight() {
int value=0;
value = end.getData();
end = end.getLinkPrev();
end.setLinkNext(null);
size-- ;
return value;
}
public static void main(String[] args) {
SortedSearch tree = new SortedSearch();
tree.attachWagonFromLeft(7);
tree.attachWagonFromLeft(13);
tree.attachWagonFromLeft(12);
tree.attachWagonFromLeft(10);
tree.attachWagonFromLeft(6);
tree.attachWagonFromLeft(4);
tree.attachWagonFromLeft(3);
tree.attachWagonFromLeft(2);
System.out.println(tree.detachWagonFromRight()); // 7
System.out.println(tree.detachWagonFromRight()); // 13
System.out.println(tree.detachWagonFromRight()); // 7
System.out.println(tree.detachWagonFromRight()); // 13
System.out.println(tree.detachWagonFromRight()); // 7
System.out.println(tree.detachWagonFromRight()); // 13
}
}
И протестировал его соответственно. Но когда он был представлен, он сказал, что не удалось выполнить внутренние тестовые примеры, и ответ был помечен неправильно. Не могли бы вы рассказать, что является лучшим решением для этой проблемы.