方式一:
/**
*
*/
/**
* @author jueying:
* @version 创建时间:2018-12-9 下午05:41:38
* 类说明
*/
/**
* @author jueying
*
*/
public class GoodBoy {
public static Node headNode=null;//头指针
int i=0;
public static Stack stack=null;
public static int StackArray[]=null;
//栈的实现
class Stack{
int base;//栈底
int top;//栈顶
int MaxSize;//栈可用的最大容量
public Stack(int base,int top,int MaxSize){
this.base=base;
this.top=top;
this.MaxSize=MaxSize;
StackArray=new int[MaxSize];
}
}
class Node{
public Node(Integer data,Node next){
this.data=data;
this.next=next;
}
public int data;//值
public Node next;//next指针(c语言中)
}
//前插法创建链表
/*
* 1.p=head.next;//头节点的下一个结点赋值给中间结点
* 2.Node q=new Node();//创建一个新结点
* 3.q.next=p;//头节点的下一个结点赋值给新结点的下一个结点
4.head.next=q;//把新结点赋值给头节点的下一个结点
*/
public void createNode(Node node,Integer data){
if(i<10){
//1.创建一个新结点
//2.把上一次创建的结点赋值的新结点的下一个结点 每次创建的新结点等于下一次创建结点的下一个结点
Node newnode=new Node(++i,node);
createNode(newnode,i);
}else{
headNode=new Node(i,node);//最后一个元素等于头节点的下一个结点
push();
}
}
//输出链表值入栈
public void push(){
System.out.println("从头到尾输出链表的为:");
while(headNode.next!=null&&stack.top-stack.base!=stack.MaxSize){
headNode=headNode.next;
System.out.println(headNode.data);
StackArray[stack.top++]=headNode.data;//入栈
}
pop();
}
//出栈
public void pop(){
System.out.println("逆序输出链表的值为:");
while(!(stack.top==stack.base)){
System.out.println(StackArray[--stack.top]);
}
}
/**
* @param args 从尾到头打印链表值
*
* 1.用栈实现
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GoodBoy boy=new GoodBoy();
stack=boy.new Stack(0,0,10);
boy.createNode(null,null);
//初始化栈
}
}
方式二:
/**
*
*/
/**
* @author jueying:
* @version 创建时间:2018-12-12 下午07:35:25
* 类说明
*/
/**
* @author jueying
*
* 后插法创建链表,使用递归实现逆序输出链表
*
*/
public class GoodBoy1 {
public static Node headNode;
static GoodBoy1 boy1=new GoodBoy1();
static Integer i=1;
class Node{
public Integer data;//数据域
public Node next;//next指针
}
/*
* 使用后插法创建链表
*/
public static void createLinkList(Node node){
if(i<=10){
Node p=node;//保存头结点的下一个指针
Node q=boy1.new Node();//创建新结点
q.data=i;//设置数据域
p.next=q;
System.out.println("数据域为"+i);
i++;
createLinkList(q);
}else{
System.out.println("从头到尾输出链表");
pop(headNode.next);
System.out.println("从尾到头输出链表");
ReverseOrder(headNode.next);
}
}
/*
* 从头到尾输出链表
*
*/
public static void pop(Node node){
if(node.next!=null){
System.out.println(node.data);
node=node.next;
pop(node);
}else{
System.out.println(node.data);
}
}
/*
* 递归逆序输出链表
*
*/
public static void ReverseOrder(Node node){
if(node.next!=null){
ReverseOrder(node.next);
}
System.out.println(node.data);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
headNode=boy1.new Node();//初始化头结点 next指针为空 数据域为空
createLinkList(headNode);
}
}