我正在学习数据结构(链接列表) 如何为下一个链接类创建这些引用,首先分别存储下一个链接和第一个链接?在实现类中,我们只是创建没有定义任何内容的引用? 那个first.next如何移动?为什么只创建一个引用,首先引用列表中的第一个元素?
class Link
{
public int iData; // data item (key)
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 + "} ");
}
}
class LinkList
{
private Link first; // ref to first link on list
public LinkList() // constructor
{
first = null; // no items 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("");
}
}
答案 0 :(得分:0)
在链表中,每个元素都有一个包含对下一个元素的引用的字段,另外还有一个变量,它保存对列表中第一个元素的引用 - 列表' s&#34 ;头部&#34 ;.
这样,当使用Link
构造新的Link newLink = new Link(id, dd);
元素时,会为其next
字段分配对当前第一个元素的引用,这使其成为新的第一个元素。
然后,列表" head"在您的代码中调用first
被赋予对新创建元素的引用。
答案 1 :(得分:0)
我认为可能让您感到困惑的部分是该类称为Link
,而Node
则是更好的名称。实质上,您的LinkList类将一堆节点链接在一起。
您创建的第一个节点包含两件事:一些数据和引用(这是将节点链接在一起的内容)到下一个Node
。存储在next
中的引用最初为您创建的每个节点设置为null。每次调用LinkList
方法时,insertFirst(int id, double dd)
班级都会更新此值。它使用一些数据创建一个新的Node
,并通过引用曾经位于第一个位置的节点来更新此节点的next
属性。想象一下,您正在创建一个链接的数字列表,并插入“10”作为第一个数字。列表如下所示:
'10'
然后你拨打insertFirst('9')
,它看起来像这样:'9' ----> '10'
,因此第一个节点包含数字9作为数据,其next
设置为“10”这一行:newLink.next = first; // newLink --> old first
。包含9的节点将其next
属性设置为包含10的节点,然后将first
设置为您刚刚创建的新节点,即包含9的节点。此过程重复为您继续添加节点,因此最终看起来像1 ----> 2 ----> 3 ----> ... ----> 8 ----> 9 ----> 10
,因此每个Node
都会引用列表中的下一个节点。