在下面的链接列表代码中
为什么 Link在第二次调用时不newLink = new Link()给出错误,因为已经定义了?thelist.insertfirst()newlink
我的理解——变量的范围newlink是方法insertfirst()。
Link newLink = new Link(id, dd);
创建链接时newlink,变量newlink保存创建的链接对象的内存地址。
newLink.next = first;
first是一个链接变量,其中包含链接对象的内存地址。
然后,newlink.next()指向object contained at the memory address of the variable first。
first = newLink;
然后,变量first指向newlink. 这意味着 first 现在包含对象的内存地址newlink(newlink 本身包含实际对象的地址)。
当方法完成时,变量“newlink”丢失,但我们不在乎,因为我们已经有了链接对象copied的内存地址(在next字段中)。
这个比喻正确吗?
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)
////////////////////////////////////////////////////////////////
class LinkList
{
private Link first; // ref to first link on list
public LinkList() // constructor
{
first = null; // no links on list yet
}
// insert at start of list
public void insertFirst(int id, double dd)
{ // make new link
Link newLink = new Link(id, dd);//######################################## DOESN'T THROW ERROR
newLink.next = first; // newLink --> old first
first = newLink; // first --> newLink
}
} // end class LinkList
////////////////////////////////////////////////////////////////
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);
} // end main()
} // end class LinkListApp
////////////////////////////////////////////////////////////////
呼如林
相关分类