《剑指offer》 链表第一题:从尾到头打印链表

//写在开头,博主是一名大专学生大一生,由于从九月份开始学习算法,但是一直处在理论学习,  经老师推荐刷《剑指offer》,备战明年的蓝桥杯java组,写博客以此来记录学习之路,由于博主  没有任何算法基础,从零开始学习,写的解法难免会有很多错误,欢迎大家指错,写在这的解法    肯定是经过idea编译通过的。

package 链表;
import java.util.*;

//剑指offer ,链表第一题: 从尾到头打印链表

//思路: 想一下所学知识,从尾到头,符合栈的特点,所以我们这题用栈的思想解决。
//      将值赋给栈,再定义一个ArrayList数组,最后出栈将元素赋给数组。

public class Listlcz1 {
    class Node{                                            //准备工作
        int val;
        Node next;
        Node(int val)            //关于为什么next不进行初始化,因为在下面的程序中next会自动赋值的
        {
            this.val=val;
        }
    }

    public ArrayList printlist(Node node)        //!!!!!重点!,ArrayList因为调用printlist的result
    {                                                     //是ArrayList的,所以这里也要同样定义。
        ArrayList  list= new ArrayList<>();      //定义一个存放最后数据的数组。
        Stack  stack= new Stack<>();                //新建一个栈
        if(node==null)
            return null;
        Node head=node;                                    //定义一个节点存放数据
        while(head!=null)
        {
            stack.push(head);                                //将数据压入栈
            head=head.next;
        }
        while(!stack.isEmpty())
        {
            Node temp=stack.pop();                        //出栈并将元素赋给list数组
            list.add(temp.val);
        }
        return list;
    }


    public static void main(String[] args) {
        Listlcz1 list = new Listlcz1();
        Node node1=list.new Node(1);                    //实例化list用于调用方法
        Node node2=list.new Node(2);                    //创建链表
        Node node3=list.new Node(3);
        Node node4=list.new Node(4);
        Node node5=list.new Node(5);


        node1.next = node2;                                  //链接节点
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;

        ArrayList result= list.printlist(node1);   //我们只需要使用链表的头节点node1即可遍历整个链表,获取完整的节点值列表。
        System.out.println(result);
    }
}

运行结果:

《剑指offer》 链表第一题:从尾到头打印链表_第1张图片

你可能感兴趣的:(链表,数据结构,java)