1 //用链表实现堆栈 2 /** 3 * 节点类 4 */ 5 class LinkS { 6 private long data; 7 public LinkS next; 8 9 public LinkS(long d) { 10 this.data = d; 11 } 12 13 public String toString() { 14 return String.valueOf(data); 15 } 16 } 17 18 /** 19 * 链表类 20 */ 21 class LinkSList { 22 private LinkS first; 23 24 public LinkSList() { 25 first = null; 26 } 27 28 public void insertFirst(LinkS node) { 29 node.next = first; 30 first = node; 31 } 32 33 public LinkS deleteFirst() { 34 LinkS temp = first; 35 first = first.next; 36 return temp; 37 } 38 39 public boolean isEmpty() { 40 return first == null; 41 } 42 43 public String toString() { 44 if (isEmpty()) 45 return "[]"; 46 StringBuilder sb = new StringBuilder(); 47 sb.append("["); 48 LinkS curr = first; 49 while (curr != null) { 50 sb.append(curr.toString()).append(","); 51 curr = curr.next; 52 } 53 sb.deleteCharAt(sb.length() - 1); 54 sb.append("]"); 55 return sb.toString(); 56 } 57 } 58 59 /** 60 * 栈 61 */ 62 class LinkStack { 63 private LinkSList linkList; 64 65 public LinkStack() { 66 this.linkList = new LinkSList(); 67 } 68 69 public void push(LinkS l) { 70 this.linkList.insertFirst(l); 71 } 72 73 public LinkS pop() { 74 return this.linkList.deleteFirst(); 75 } 76 77 public boolean isEmpty() { 78 return this.linkList.isEmpty(); 79 } 80 81 public String toString() { 82 return this.linkList.toString(); 83 } 84 85 public void display() { 86 System.out.println(toString()); 87 } 88 } 89 90 public class LinkStackDemo { 91 public static void main(String[] args) { 92 LinkStack stack = new LinkStack(); 93 for (int i = 0; i < 5; i++) { 94 LinkS l = new LinkS(i); 95 stack.push(l); 96 stack.display(); 97 } 98 while (!stack.isEmpty()) { 99 System.out.print("pop出" + stack.pop()); 100 System.out.print("现在栈为:"); 101 stack.display(); 102 } 103 } 104 }