05 从尾到头打印连表

思路很简单,用一个栈来存储链表,再拿出来就反向了
实现代码:


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

import java.util.List;
import java.util.Scanner;
import java.util.Stack;

class Node{
    int data;
    Node next=null;
    public Node(int data) {
        // TODO Auto-generated constructor stub
        this.data=data;
    }
}

public class MyLinkedList {
    private static Node head,tail;

    public MyLinkedList() {
        // TODO Auto-generated constructor stub
        head=tail=null;
    }

    public static boolean isEmpty() {
        return head==null;
    }

    public static void addFirst(int data){
        Node newNode=new Node(data);
        newNode.next=head;
        head=newNode;
    }

    public static void add (Collection<Integer> c){
        Object[] a = c.toArray();
        int numNew = a.length;
        if (numNew == 0)
            return ;
        for (Object o : a) {
            addTail((int) o);
        }

    }
    public static void addTail(int data){
        Node newNode=new Node(data);
        if (tail==null) {
            head=tail=newNode;
        }else {
            tail.next=newNode;
            tail=newNode;
        }
    }

    public static void displayListReverse(Node head){
/*  方法一  用栈
    System.out.println("List  (tail-->head):  ");
        Stack<Integer> stack=new Stack<Integer>();
        Node current=head;
        while (current!=null) {
            stack.push(current.data);
            current=current.next;
        }
        while (!stack.isEmpty()) {
            System.out.print(stack.pop()+"  ");
        }*/

    // 方法二  用递归 
        if (head!=null ) {
            if (head.next!=null) {
                displayListReverse(head.next);
            }
        }

        System.out.println(head.data);

    }

    public static void main(String[] args) {


        ArrayList<Integer> arrayList=new ArrayList<Integer>();

        Scanner in=new Scanner(System.in);
        System.out.println("请输入链表的个数n:");
        int n=in.nextInt();
        System.out.println("请输入n个链表元素:");
        for (int i = 0; i < n; i++) {
            arrayList.add(in.nextInt());
        }
        add(arrayList);
        displayListReverse(head);
    }

}

测试结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值