链表栈(Linked List Stack)
链表栈(Linked List Stack)是使用链表实现的栈结构。链表是一种常用的数据结构,它由节点(Node)组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
在链表栈中,栈顶元素对应于链表的头节点。每次入栈操作都是在链表的头部插入一个新的节点,而每次出栈操作都是删除链表的头节点。
链表栈相比于数组栈,具有动态性和灵活性。因为链表栈的空间是动态分配的,可以随时进行扩容或缩容;而数组栈的空间是固定的,需要预先确定大小。
以下是使用Java语言实现链表栈的示例代码:
public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
public class LinkedListStack {
private ListNode top;
public LinkedListStack() {
this.top = null;
}
public boolean isEmpty() {
return top == null;
}
public void push(int val) {
ListNode node = new ListNode(val);
node.next = top;
top = node;
}
public int pop() {
if (isEmpty()) {
throw new EmptyStackException();
}
int val = top.val;
top = top.next;
return val;
}
public int peek() {
if (isEmpty()) {
throw new EmptyStackException();
}
return top.val;
}
}
在上述代码中,我们定义了一个 ListNode 类表示链表节点,包含一个整数值 val 和一个指向下一个节点的指针 next。然后定义了 LinkedListStack 类,其中包含了 isEmpty、push、pop 和 peek 四个方法。其中,isEmpty 方法用于判断链表栈是否为空,push 方法用于入栈操作,在链表头部插入新的节点,pop 方法用于出栈操作,删除链表头部的节点,并返回其值。peek 方法用于返回链表栈的栈顶元素的值,而不删除该元素。注意,在 pop 和 peek 方法中,我们需要先判断链表栈是否为空,如果为空,则抛出 EmptyStackException 异常。