题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。
由尾到头打印,那么考虑到是逆序打印,可以往栈或递归方面想。
在不能改变链表结构的时候,我们需要考虑用栈。
找到尾节点,最起码我们需要遍历一次链表,那么先遍历到的节点却是在后面打印,这满足一个“先进后出”或者“后进先出”的性质,这就是栈了。
所以考虑用栈来做这道题目即可
Link结构:
public class Link {
int value;
Link next;
public Link(int v) {
value =v;
}
public Link() {
}
}
public class FrontToRear05 {
public void frontToRear(Link link){
Link current = link;
Stack<Link> stacks = new Stack<Link>();
//如果链表为空 则返回
if(current==null){
System.out.println("Link is empty");
return ;
}
//压入栈,直到链表为空
while(current!=null){
stacks.push(current);
current = current.next;
}
//出栈 直到栈为空
while(!stacks.isEmpty()){
System.out.println(stacks.pop().value+" ,");
}
}
public static void main(String[] args) {
FrontToRear05 f = new FrontToRear05();
//exm1
Link ll = new Link(1);
Link a = new Link(2);
Link b =new Link(3);
Link c = new Link(4);
ll.next=a;
a.next=b;
b.next=c;
f.frontToRear(ll);
//exm2
Link dd =null;
f.frontToRear(dd);
}
}
Result:
4 ,
3 ,
2 ,
1 ,
Link is empty