剑指offer——链表反转之栈方法
来源:互联网 发布:linux怎么进入vim 编辑:程序博客网 时间:2024/06/08 17:14
题目:输入一个链表的头结点,从头到尾的打印出每个结点的值
上一次我用递归的思想实现了链表的反转,这次我将使用栈的思想来解决会问问题,因为栈的特殊性,后入先出的特点,所以我们可以将链表内的元素遍历,然后在循环中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 stubthis.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 0
- 剑指offer——链表反转之栈方法
- 剑指offer——反转链表
- 《剑指offer》——反转链表
- 《剑指offer》——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指offer——反转链表
- 剑指Offer——反转链表
- 剑指offer——反转链表
- 剑指offer—反转链表
- 剑指offer(15)—反转链表
- 剑指offer—反转链表
- 剑指Offer之反转链表
- 剑指Offer之 - 反转链表
- 剑指offer之反转链表
- 【注意】新一轮勒索病毒Petya正在全球疯狂传播!
- Custom Interactions——自定义交互式控件
- Makefile 中:= ?= += =的区别
- eclipse--gradle
- dos 批处理 for知识学习
- 剑指offer——链表反转之栈方法
- oracle中利用序列和触发器创建自增长的表
- KSGT
- ssm框架开发今天偶然发现的要注意的问题
- linux学习 tcp回绕
- ALGORITHM 4.1-2
- codeforces 439A Devu, the Singer and Churu, the Joker
- Form表单提交验证方式
- CSS选择器类型