Класс MyLinkedList
в вашем вопросе следует структуре структуры данных стека (в то время, когда я пишу этот ответ).То есть: каждый раз, когда вы добавляете новый элемент, новый элемент заменяет ранее добавленный элемент в качестве первого элемента.
Я думаю, вы хотите получить 1
в качестве первого элемента, если вы добавили элементы 1
, 2
, 3
в таком порядке.Поправьте меня, если я ошибаюсь.
В этом случае ваш связанный список и его поиск должны быть такими:
(Примечание: я избежал private
vars, public
геттер, установщик и т. д .; чтобы код был легко читаемым. Но читатели должны добавить их.)
class Node{ int x; Node next; }
class LinkedList
{ Node head,tail;
void add(int y)
{ Node node = new Node();
node.x=y;
if(head==null)
head = tail = node;
else
tail = tail.next = node;
}
int getFirst()
{ if(head!=null)
return head.x;
else
throw new java.util.NoSuchElementException("List is empty");
}
}
Если вы посмотрите на java.util.LinkedList
, вы найдете методы, которые обычно используются в связанных списках,Если это не домашнее задание, тогда я предлагаю вам не изобретать велосипед.Просто используйте существующие библиотеки.
Если вам нужно использовать структуру данных стека, и вы не можете ее изменить, тогда я предлагаю вам изменить getFirst()
следующим образом:
int getFirst()
{ if(tail!=null)
return tail.x;
else
throw new java.util.NoSuchElementException("List is empty");
}
Если вам не разрешено добавлять Node tail
в ваш код, тогда ваш getFirst()
будет выглядеть следующим образом:
int getFirst()
{ if(head==null)
throw new java.util.NoSuchElementException("List is empty");
Node node = head;
while(node.next!=null)
node=node.next;
return node.x;
}