上一篇文章是用数组写的,这篇用的单链表写的。
public class LinkedListStack {
public static void main(String[] args) {
LinkedStack as = new LinkedStack();
String key = "";
boolean flag = true;
Scanner sc = new Scanner(System.in);
while (flag){
System.out.println("show: 显示数据");
System.out.println("exit: 退出");
System.out.println("push: 添加");
System.out.println("del: 取出");
System.out.println("请输入你的选择");
key = sc.next();
switch (key){
case "show":
as.show();
break;
case "exit":
flag = false;
break;
case "del":
try {
as.pop();
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case "push":
System.out.println("请输入你要添加的数据");
int value = Integer.parseInt(sc.next());
Linked bb = new Linked(value);
as.push(bb);
break;
default:
break;
}
}
}
}
class LinkedStack{
private Linked l = new Linked(0);
public void push(Linked linked){
Linked temp = l;
if (temp.next == null){
temp.next = linked;
}else {
linked.next = temp.next;
temp.next = linked;
}
}
public void pop(){
Linked temp = l;
if (temp.next == null){
throw new RuntimeException("无数据,无法取出");
}
Linked value = temp.next;
temp.next = temp.next.next;
System.out.printf("出栈的是%d\n", value.num);
}
public void show(){
Linked temp = l;
if (temp.next == null){
System.out.println("空");
return;
}
while (true){
if (temp.next == null){
break;
}
System.out.printf("栈里的数据为%d\n", temp.next.num);
temp = temp.next;
}
}
}
class Linked{
public int num;
public Linked next;
//构造器
public Linked(int num) {
this.num = num;
}
@Override
public String toString() {
return "Linked{" +
"num=" + num +
", next=" + next +
'}';
}
}