从尾到头打印链表
如题所示,之前觉着这个就是一个简单的将链表转到栈,然后从栈顶开始输出。于是准备全部手写链表、栈结构。可是实现的过程之中发现还是感受到了原来一些没有体会到的思想。
遇到的问题一:链表结构之前想的是在链表外部每次传进来node节点,每次链表对这些节点操作,而自身内部不生成新的节点。
遇到的问题二:如果按照问题一的做法,链表的第一个节点放入栈中后,按照规则说,此时栈中的顶部节点不指向任何节点,也就是它的next=null,可是这样后会造成链表断裂,而不改它的next,则在最后的链表输出的时候,造成死循环,两个节点一直指向对方不会结束。
因此,无论是链表结构还是栈结构,在形成的时候,内部新生成节点,不依赖传入的节点。
在解决这些基本结构后,主程序也就很简单了。
1 import java.util.*; 2 public class PrintListReversingly { 3 public static void PrintListReversingly(Node head){ 4 Node node=new Node(); 5 node=head; 6 if(node==null){ 7 System.out.println("the list is null"); 8 } 9 else{ 10 Stack stack=new Stack(); 11 Node top=new Node(); 12 while(node!=null){ 13 top=stack.push(node); 14 node=node.next; 15 } 16 stack.printStack(top); 17 System.out.println(stack.getTop()); 18 } 19 20 } 21 public static void main(String[] a){ 22 Scanner read=new Scanner(System.in); 23 String c; 24 c=read.nextLine(); 25 Node node=new Node(c); 26 LinkList link=new LinkList(node); 27 while(!node.data.equals("#")){ 28 link.add(node); 29 c=read.nextLine(); 30 node=new Node(c); 31 } 32 PrintListReversingly(link.getHead()); 33 } 34 }
jeyfang