从尾到头打印链表

  如题所示,之前觉着这个就是一个简单的将链表转到栈,然后从栈顶开始输出。于是准备全部手写链表、栈结构。可是实现的过程之中发现还是感受到了原来一些没有体会到的思想。

  遇到的问题一:链表结构之前想的是在链表外部每次传进来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 }

 

posted @ 2016-04-29 16:50  jeyfang  阅读(210)  评论(0编辑  收藏  举报