LinkedList概念的下一个

时间:2014-05-04 22:25:10

标签: java data-structures linked-list

我正在学习数据结构(链接列表) 如何为下一个链接类创建这些引用,首先分别存储下一个链接和第一个链接?在实现类中,我们只是创建没有定义任何内容的引用? 那个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("");
}
}

2 个答案:

答案 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都会引用列表中的下一个节点。