本帖最后由 cyshen 于 2010-05-25 15:55:17 编辑

解决方案 »

  1.   

     private Node<T> top=new Node<T>();
    这个时候 
    top的结构为
    {null , null}第一次push , 是按照new Node(U item,Node<U> next) 的方式进行 push,所以
    此时top的结构为
    { "Phasers" , {null ,null}}同理 ,循环第二次
    top的结构为
    {
    "on",
    { "Phasers" , {null ,null}}
    }
    循环第三次
    top的结构为
     {  "stun!",  {"on",{ "Phasers" , {null ,null} } } }
      

  2.   

    我能理解,但是不知道能不能说明白,如果说不明白,你可以去百度看看头插法构建stack不知道楼主学过数据结构没有. 数据结构构造链表的方式有头插法跟尾插法,头插法在于有一个头指针始终指向链表的第一个节点. 
    当执行这一句的时候: LinkedStack<String> lss=new LinkedStack<String>();
    在类内部private Node<T> top=new Node<T>(); 先构造了一个头节点. 这个头节点没有数据,它只作为一个指针,指向以后加进来的数据.
    for(String s:"Phasers on stun!".split(" "))//使用字符串分割的方法,分割成3个字符串
                lss.push(s);//调用stack的push方法
     public void push(T item)
    {
       top=new Node<T>(item,top);//new一个新的节点对象,注意调用的构造方法
    } Node(U item,Node<U> next)
    {  
       this.item=item;//让节点的data域等于外面传来的字符串
       this.next=next;//关键在这里,让新的节点的next指针指向了传进来的top对象,配合push里面的 top=new Node<T>(item,top),旧的top指向新的节点.这样就使用了头插法构成了链表
     }至于你说在pop时,它是调用top.item取得数据.正是因为是使用头插法构造的链表,头节点只是一个空节点,里面的top始终指向最后一个插入的节点,所以用top.item取得数据
      

  3.   

    还有一点就是  指针其实一直指的是 top和 new node() 无关。top的结构为
     { "stun!", {"on",{ "Phasers" , {null ,null} } } }所以 pop的时候
    会反着把 Phasers on stun! 中的三个词打印出来。