核心代码
//初始化一个数组,用来将链表结构转化为数组结构 ArrayList<Node> nodeList = new ArrayList<Node>(); while(header!=null){ //header为传进来的头节点代表当前节点,当前节点不为空时 nodeList.add(header); //存入当前节点到数组中 header = header.getNext(); //下一个节点赋给当前节点 }
完整代码
/** * 节点 */ class Node{ private String data; //包含数据 private Node next; //下一个节点,因为对象为引用类型所以在内存中此next变量指向内存中的另一个Node public String getData() { return data; } public void setData(String data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } public Node() { } } /** * 反向打印链表 */ public class LinkRevPrint { /** * 反向打印链表方法 * @param header 链表头,即第一个节点 */ public static void printLinkReverse(Node header){ //初始化一个数组,用来将链表结构转化为数组结构 ArrayList<Node> nodeList = new ArrayList<Node>(); while(header!=null){ //header代表当前节点,当前节点不为空时 nodeList.add(header); //存入当前节点到数组中 header = header.getNext(); //下一个节点赋给当前节点 } //将转化为数组的链表从后往前打印 for (int i = nodeList.size()-1; i >= 0; i--) { Node node = nodeList.get(i); System.out.println(node.getData()); } } public static void main(String[] args) { Node nodeFirst = new Node(); nodeFirst.setData("第一个节点的数据"); Node nodeSec = new Node(); nodeSec.setData("第二个节点的数据"); nodeFirst.setNext(nodeSec); //第一个节点指向第二个 Node nodeThird = new Node(); nodeThird.setData("第三个节点的数据"); nodeSec.setNext(nodeThird); //第二个节点指向第三个节点 Node nodeFour = new Node(); nodeFour.setData("第四个节点的数据"); nodeThird.setNext(nodeFour); //第三个节点指向第四个节点 //传入头节点,反向打印链表 printLinkReverse(nodeFirst); } }
结果