java利用链表实现栈

在前面,写了怎么利用数组来实现栈,以及动态数组的利用。今天我们就利用链表的方式来实现栈,我们知道链表存储数据只要内存够,就可以放足够多的数据,这也就解决了数组带来的弊端。

链表类:

public class LLNode {
private Object data;//存放数据
private LLNode next;//指向下一个节点
public LLNode(){
	
}
public LLNode(Object data){
	this.data=data;
}
public Object getData() {
	return data;
}
public void setData(Object data) {
	this.data = data;
}
public LLNode getNext() {
	return next;
}
public void setNext(LLNode next) {
	this.next = next;
}
}

实现栈的类:

   

public class LLStack {
  LLNode headnode=null;
  public LLStack(){
	  headnode=new LLNode(null);//先初始化
  }
  
  public boolean isEmpty(){//判断是否为空的
	  return headnode==null;
  }
  
  public void push(Object data){//入栈
	  if(headnode.getData()==null){//判断头结点的值为空的时候
	       headnode.setData(data);	  
	  }
	  else if(headnode==null){
		  headnode=new LLNode(data);
	  }
	  else {
		  LLNode newnode=new LLNode(data);
		  newnode.setNext(headnode);
		  headnode=newnode;
	}
}
  
  
  public Object pop(){//出栈(返回栈顶的值,并且删除)
	  Object data=null;
	  if(isEmpty()){
		  System.out.println("栈为空,返回值为0");
		  return 0;
	  }
	  data=headnode.getData();
	  headnode=headnode.getNext();
	  return data;
  }
  
  public Object top(){//返回栈顶的值,但是不删除
	  Object data=null;
	  if(isEmpty()){
		  System.out.println("栈为空,返回值为0");
		  return 0;
	  }
	  data=headnode.getData();
	  return data;
  }
  
  public int getLength(){//得到栈里面值的个数
	  int count=0;
	  LLNode tempnode=headnode;
	  if(isEmpty()||tempnode.getData()==null)//当头结点为空,并且值也为空的时候就返回0
	  {
		  count=0;
	  }
	  else
	  {
		  while(tempnode!=null)
		  {
			  count++;
			  tempnode=tempnode.getNext();
		  }
	  }
	  return count;
  }

}

测试类:

public static void main(String[] args) {
	  LLStack llStack=new LLStack();
	  llStack.push(1);
	  llStack.push(2);
	  llStack.push(3);
	  System.out.println("栈里面值的个数为:"+llStack.getLength());
	  llStack.pop();
	  System.out.println("pop一个之后,栈里面的个数 为 :"+llStack.getLength());
	  System.out.println("pop一个之后,栈顶的值为:"+llStack.top());
}

测试的结果为:

代码的正确性,大家可自行测试,若有疑问,请call me!!!,谢谢您的阅读!

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值