首先代码如下:package com.dbstructor.oop2;
class Link {
public int iData;
public double dData;
public Link next; 

public Link(int id, double dd){
iData = id;
dData = id;
}

public void displayLink(){
System.out.print("{" + iData + "," + dData + "}");
}
}
class LinkList {
private Link first;
public LinkList(){
first = null;
}

public boolean isEmpty(){
return (first == null);
}

// 插入链接点
public void insertFirst(int id, double dd){
Link newLink = new Link(id, dd);
newLink.next = first;
first = newLink;
}

// 删除链接点
public Link deleteFirst(){
Link temp = first;
first = first.next;
return temp;
}

public void displayList(){
System.out.print("List (first-->last): ");
Link current = first;
while(current != null){
current.displayLink();
current = current.next;
}
System.out.println("");
}
}public class LinkListApp { public static void main(String[] args) {
LinkList theList = new LinkList();
theList.insertFirst(22, 2.99);
theList.insertFirst(44, 4.99);
theList.insertFirst(66, 6.99);
theList.insertFirst(88, 8.99);

theList.displayList();

while(!theList.isEmpty()){
Link aLink = theList.deleteFirst();
System.out.print("Deleted ");
aLink.displayLink();
System.out.println("");
}

theList.displayList(); }}

解决方案 »

  1.   

    插入链接点的图片解析
    问题:大家帮助理解些链表,看了几遍一直没理解好:
    主要的几点疑惑public Link next; 这个是在内存里怎么分配.
        // 插入链接点
        public void insertFirst(int id, double dd){
            Link newLink = new Link(id, dd);
            newLink.next = first;
            first = newLink;
        }
    这个方法怎么和上面这个图片对应上去?
      

  2.   

    晕 图片怎么看不到了...
    大家主要给我讲解一下
    insertFirst和deleteFirst这两个方法
    引用是怎么个具体指向(每一步代码)
    然后怎么维护形成链表了 谢谢大家
      

  3.   

    next 开始随结点初始化为null,如果有新的结点插入就指向新的结点。
      

  4.   


        public void insertFirst(int id, double dd){
            Link newLink = new Link(id, dd);//这里是创建了一个新的链接点
            newLink.next = first;  // 第二步
            first = newLink;       // 第三步和第二步怎么跟图片不吻合的感觉...
        }
      

  5.   

    链表的一个节点 包含一个值和一个指向下个节点的引用 一个链表首先有个first指向第一个节点 你要insertFirst的时候 首先就要先new一个节点:
    Link newLink = new Link(id, dd)
    然后 把这个新new节点所持有的引用指向原来的第一个节点: 
    newLink.next = first;
    然后把first这个引用指向新new的节点 
    first = newLink; 
    就是这样的
      

  6.   

    图片是静态的 又不可能看出三步来 图片里的那个33就是新new的节点
      

  7.   

    每个链表都有一个first
    它也是一个结点类型的。
    当然我们也可以把它理解为整个链表的一个指针。
    它标识了链表的存在。
    在插入操作中:
    因为都是在起始位置上作插入操作的。所以first总是会指向新的结点,当然要使新的结点插入到整个链表中还要做新的结点的next指向原来first的所指向的那个结点,
    每插入一点新的结点都有这样的操作。这样链表就不断的增长。
      

  8.   

    删除操作它也是从起始位置进行删除的:
    Link temp = first;
    first = first.next;
    return temp;   
    直接把first指向第二次结点就可以了,也就是第一个结点所指向的下一个 first = first.next
       
      

  9.   

    newLink.next = first;
    这句话 到底是next指向了first的引用 还是first指向了next的引用呢?
      

  10.   

    public void insertFirst(int id, double dd){
            Link newLink = new Link(id, dd); //新建一个结点.
            newLink.next = first;           //新建的结点的next指向first指向的结点。
            first = newLink;                //first指向新结点。    }
         
      

  11.   


    新的结点的next指向了first指向的内容。
      

  12.   

    next指向了原来first指向的那个节点
      

  13.   

    第一步,新建结点,并用newLink指向新结点。
    第二步,新结点的next指向first指向的结点。
    第三步,first指向新结点。
      

  14.   

    嗯 谢谢楼上几位 
    再有就是我#6的图
    每一块叫一个链接点么? 还是其实的first和next叫链接点
      

  15.   

    每一块叫结点 first和next是引用 
      

  16.   

    删除结点:
    1.用一个引用指(temp)向first指向的结点。
    2.让first指向first指向的结点的next属性指向的结点。
    3.返回temkp.
      

  17.   


    谢谢楼上的兄弟们.
    LinkList theList = new LinkList();
    theList.insertFirst(22, 2.99);
    这个我这样理解大伙看对不对 对了就表示通了呵呵..首先LinkList theList = new LinkList();实例化对象即首链接点.并初始了Link类型的 first为Null
    其次theList.insertFirst(22, 2.99);在这个方法里 
    (1)Link newLink = new Link(id, dd);也是新建一个newLink链接点,并初始化Link类型的next为Null
    (2)newLink.next = first;将first指针地址覆盖next的,即next指向了first的引用
    (3)first = newLink;将first指向了newLink的新引用
    最终链结构就是first--->newLink(next)---->Null大伙指正下 准备结贴  
      
      

  18.   

    就是那个样子,你的添加结点和删除结点都在表头,也就是first,那里,所以我说你的链表和栈一样,是一种先入后出的结构。
      

  19.   


    回楼上的兄弟,我这个就是单链表 所以一个入口而已,以后会渐渐扩展的.所以会经常来问大家的
    因为我是自学JAVA.谢谢大家.都很热心...
      

  20.   

    delete()还应该加个非空判断吧