Обновление: Большое спасибо всем, кто ответил !!! Это заставило меня почувствовать, что я не совсем одинок в своих усилиях по изучению Java. Пожалуйста, извините меня, но я полагаю, я недостаточно разъяснил, чего я не понимаю о связанных списках и приложении упражнений - сначала
- как определение класса может содержать объект самого себя, хорошо, я знаю, что это рекурсия но для меня это все еще очень странное и чуждое понятие.
второй - как именно объект связанного списка может «связываться» с другим узлом?
третий - если два объекта разделены знаком равенства, это означает, что второй объект исчезает, а то, что от него остается, - это " name ", который теперь указывает на первый объект или наоборот?
тогда - то, что я не понимаю о программе, которую я цитирую ниже, заключается в следующем: после создания экземпляра класса linkList вызывается конструктор, и он дает объект класса Link private Link сначала значение null, то есть устанавливает его ни на что не указывающее. Затем, когда создается первый новый узел, вызывается метод public void insertFirst, он передает значения объекта своим переменным, а затем происходит что-то абсурдное - объект, который первым ни на что не указывает, назначается новому элементу, таким образом, оба объекта указывают на ничего и с первым = newLink; Я совсем потерялся ...
Я изучаю в колледже курс по алгоритмам и структурам данных, и, поскольку профессор действительно груб и его объяснения бесполезны, я пытаюсь выучить самостоятельно из книги Роберта Лафора «Алгоритмы и структуры данных».
Сейчас я изучаю связанные списки, и в книге есть следующий пример кода для реализации связанного списка:
Link.java:
class Link
{
public int iData; // data item
public double dData; // data item
public Link next; // next link in list
public Link(int id, double dd) { // constructor
iData = id; // initialize data
dData = dd; // ('next' is automatically
} // set to null)
public void displayLink() { // display ourself
System.out.print("{" + iData + ", " + dData + "} ");
}
}
LinkList.java:
class LinkList {
private Link first; // ref to first link on list
public LinkList() { // constructor
first = null; // no links on list yet
}
public boolean isEmpty() { // true if list is empty
return (first==null);
}
// insert at start of list
public void insertFirst(int id, double dd) { // make new link
Link newLink = new Link(id, dd);
newLink.next = first; // newLink --> old first
first = newLink; // first --> newLink
}
public Link deleteFirst() { // delete first item
// (assumes list not empty)
Link temp = first; // save reference to link
first = first.next; // delete it: first-->old next
return temp; // return deleted link
}
public void displayList() {
System.out.print("List (first-->last): ");
Link current = first; // start at beginning of list
while(current != null) // until end of list,
{
current.displayLink(); // print data
current = current.next; // move to next link
}
System.out.println("");
}
}
LinkListApp.java:
class LinkListApp {
public static void main(String[] args) {
LinkList theList = new LinkList(); // make new list
theList.insertFirst(22, 2.99); // insert four items
theList.insertFirst(44, 4.99);
theList.insertFirst(66, 6.99);
theList.insertFirst(88, 8.99);
theList.displayList(); // display list
while( !theList.isEmpty() ) { // until it's empty,
Link aLink = theList.deleteFirst(); // delete link
System.out.print("Deleted "); // display it
aLink.displayLink();
System.out.println("");
}
theList.displayList(); // display list
}
}
Я просто НЕ МОГУ понять код, который вставляет и отображает элементы в классе связанного списка.
Как такое может быть, что newLink.next = first; и first = newLink;
после создания нового объекта?
Пожалуйста, помогите!