日期:2014-05-20  浏览次数:20650 次

关于Java单链表的疑惑
首先代码如下:
Java code

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();

    }

}




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

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


------解决方案--------------------


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