剑指offer——链表反转之栈方法

题目:输入一个链表的头结点,从头到尾的打印出每个结点的值

上一次我用递归的思想实现了链表的反转,这次我将使用栈的思想来解决会问问题,因为栈的特殊性,后入先出的特点,所以我们可以将链表内的元素遍历,然后在循环中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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值