更新:非常感谢每个答复的人!!!这让我感到,在学习Java方面我并不孤单。请原谅,但我想我还没有足够清楚地说明我对链表和练习应用程序的不了解-

首先-类定义如何包含其自身的对象,好吧,我知道这是递归,但对我来说这仍然是一个非常陌生和陌生的概念。

第二-链接列表对象到底如何“链接”到另一个节点?

第三-如果两个对象被等号隔开,则表示什么-第二个对象消失了,剩下的是现在指向第一个对象的“名称”,反之亦然?

然后-关于我在下面引用的程序,我没有得到的是以下内容:实例化linkList类之后,将调用其构造函数,并首先为类Link Private Link的对象提供null值,即将其指向一无所有。然后,在创建第一个新节点时,将调用public void insertFirst方法,该方法将对象值赋予其变量,然后发生一些荒谬的事情-首先将什么都没有指向的对象分配给新项目,从而使两个对象都指向什么都没有,第一个= newLink;我完全迷路了...

我正在上一门有关算法和数据结构的大学类(class),由于这位教授真的很刻薄,而且他的解释毫无用处,所以我想自己从罗伯特·拉夫雷(Robert Lafore)的一本名为《算法和数据结构》的书中学习。

现在,我正在学习链接列表,并且在本书中有以下代码示例用于实现链接列表:

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; and first = newLink;怎么可能?

请帮忙!

最佳答案

每个Link都具有对下一个.next元素(最后一个元素除外,具有Link)的引用.next = null
LinkList包含对其包含的第一个.first对象的引用(Link)。

为了在Link的开头插入新的LinkList,我们需要执行以下操作:

  • 创建一个新的Link对象以插入到前面(newLink)。
  • 让新创建的Link指向先前的第一个Link对象,作为其.next
  • .firstLinkList引用重置为newLink对象,有效覆盖先前的引用(在下面带有叉号)。


  • 这是正在发生的事情:
    public void insertFirst(int id, double dd) {
        Link newLink = new Link(id, dd);
        newLink.next = first;
        first = newLink;
    }
    

    10-07 23:42