废话不多说,先上代码publicclassTest{publicstaticvoidmain(String[]args){LinkedStacklss=newLinkedStack();for(Strings:"Phasersonstun".split(""))lss.push(s);Strings;while((s=lss.pop())!=null){System.out.println(s);}}}classLinkedStack{privatestaticclassNode{Uitem;Nodenext;Node(){this.item=null;this.next=null;}Node(Uitem,Nodenext){this.item=item;this.next=next;}booleanend(){returnitem==null&&next==null;}}privateNodetop=newNode();publicvoidpush(Titem){top=newNode(item,top);}publicTpop(){Tresult=top.item;if(!top.end())top=top.next;returnresult;}}程序经测试可以正常运行,这里采用链表来进行数据的传输,不过比较疑惑的一点是关于遍历的pop方法,哪里判断top不为空的时候指向下一个元素,但是我比较疑惑的是top默认指向的是链表尾端的next,之前的next应该已经覆盖掉了啊,为啥能找得到之前的nex节点呢?而且看一些教程上的便利都是从头节点遍历的,,,为什么能找到之前的next节点?求解惑,感激不尽
2 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
这是一个尾部插入法,首先你创建第一个节点,然后创建第二个节点,这时候第二个节点的next指向的是第一个节点,依次类推,第三个节点指向第二个节点.....当你创建完毕,pop第一个节点的时候,输出的是最后创建的节点,并且该节点的next指向倒数第二个创建的节点,这样就把所有的节点用next这条链连接起来了。可以在纸上用笔画一下创建节点的过程。
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
链表只是形式上的链表,什么是形式的链表,是这种数据结构用链表的方式表达是最容易表达出来的。我们先看main主函数走。首先就是拿字符串循环字符一个一个通过push方法进去。然后定义字符串s,通过pop方法把下一个节点的值取出来赋值给s,判空循环取值。主函数大致我读下来就是这样。我们来看Node,首先无参构造先构造空节点,两个参数的构造器的一个参数是指向节点本身,一个指向下一个节点。end方法就是如果当前节点和下一个节点为空时returntrue,push就不用说了,通过两个参数的构造器赋值,pop就是循环遍历吧,总体就是这样,为什么能够找到next是因为每一个节点的next节点都赋值了。还有为什么拿出来的时候直接指向尾部,Uitem是指向当前节点,比如你把字符"segmentfault"一个一个字符存进去的时候,存完的时候你的对象你注意看,最后的你的位置,是在t这个字符上的。以上是我的理解哈,数据结构我也挺菜的,不知道说的对不对
添加回答
举报
0/150
提交
取消