1、源码

Player实体类

  1. package com.study.stack;
  2. public class Player {
  3. private Player next;
  4. private int no;
  5. public Player(int no) {
  6. this.no = no;
  7. }
  8. public Player getNext() {
  9. return next;
  10. }
  11. public void setNext(Player next) {
  12. this.next = next;
  13. }
  14. public int getNo() {
  15. return no;
  16. }
  17. public void setNo(int no) {
  18. this.no = no;
  19. }
  20. @Override
  21. public String toString() {
  22. return "Player{" +
  23. "no=" + no +
  24. '}';
  25. }
  26. }

SingleLinkedStack类

  1. package com.study.stack;
  2. import java.util.Stack;
  3. public class SingleLinkedStack {
  4. private Player player = new Player(0);
  5. private Player temp = player;
  6. //栈空
  7. public boolean isEmpty(){
  8. return player.getNext()==null;
  9. }
  10. //入栈
  11. public void push(int value){
  12. Player node = new Player(value);
  13. temp.setNext(node);
  14. temp = temp.getNext();
  15. }
  16. //出栈
  17. public void pop(){
  18. if (isEmpty()){
  19. System.out.println("栈空");
  20. return;
  21. }
  22. Player cur = player;
  23. while (true){
  24. if (cur.getNext()==temp){
  25. break;
  26. }
  27. cur = cur.getNext();
  28. }
  29. cur.setNext(temp.getNext());
  30. int value = temp.getNo();
  31. temp = cur;
  32. System.out.println(value);
  33. }
  34. //显示栈
  35. public void list() {
  36. temp = player;
  37. if (isEmpty()) {
  38. System.out.println("栈空");
  39. return;
  40. }
  41. while (true) {
  42. if (temp.getNext() == null) {
  43. break;
  44. }
  45. System.out.println(temp.getNext());
  46. temp = temp.getNext();
  47. }
  48. }
  49. }

SingleLinkedStackDemo测试类

  1. package com.study.stack;
  2. public class SingleLinkedStackDemo {
  3. public static void main(String[] args) {
  4. SingleLinkedStack stack = new SingleLinkedStack();
  5. stack.push(1);
  6. stack.push(2);
  7. stack.push(3);
  8. stack.push(4);
  9. stack.push(5);
  10. stack.pop();
  11. stack.pop();
  12. stack.pop();
  13. stack.list();
  14. }
  15. }

测试结果
图片.png

因为链表本身是动态的,所以并不需要像数组一样设置栈的大小