题目:输入一个链表的头结点,从头到尾的打印出每个结点的值
上一次我用递归的思想实现了链表的反转,这次我将使用栈的思想来解决会问问题,因为栈的特殊性,后入先出的特点,所以我们可以将链表内的元素遍历,然后在循环中push进一个全新的栈中,之后再打印栈即可。相比起递归的思想,我更加喜欢借助栈的思想解决问题,因为Java的特殊性,为我么提示了许多形成的函数方法可以使用。下面将展示代码:
package ListNode;
import java.util.Stack;
public class Node {
private Node next;
private String value;
public Node(String value) {
// TODO Auteo-generated constructor stub
this.value = value;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
/*
* 利用栈实现链表的反转算法
*
* */
public static void ReverList(Node node){
Stack<Node> stack=new Stack<Node>();//创建一个全新的栈
while(node!=null){//判断node不为空,进行遍历
stack.push(node);//将链表的每个value压入栈中
node=node.next;//node=node.next
}
while(!stack.empty()){//判断栈不为空
Node temp = stack.pop();//创建temp的临时变量,承接栈的元素
System.out.println(temp.value);//打印元素
}
}
/*
*
* 测试数据
*
* */
public static void main(String[] args) {
Node head=new Node("a");
Node node1=new Node("b");
Node node2=new Node("c");
Node node3=new Node("d");
//初始化链表
head.setNext(node1);
node1.setNext(node2);
node2.setNext(node3);
System.out.println("打印链表反转后:");
ReverList(head);
//设置head的下一个元素为null,注意:此时head已经成为链表尾部元素。
head.next=null;
}
}
这里我将所有代码集成到了一个类中,将方法的调用都使用了static静态,大家可以拆分成多个类。
输出结果为:
打印链表反转后:
d
c
b
a