推荐答案
-- -------------------- ---- -------
----- -----
--- -------------- -------
---------- - -----
--------- - ----
----- ------
--- ---------------
-------- - ----
--- ---------- -------
-------- - -----------
------------- - --------
-------- - --------
--- ----------
-- -------- -- -----
----- --------------- ---- ----- -------
----- - --------------
-------- - -------------
------ -----
--- -----------
-- -------- -- -----
----- ---------------- ---- ----- -------
------ --------------
--- ---------------
------ -------- -- ----
本题详细解读
1. 链表节点的定义
Node
类用于表示链表中的节点。每个节点包含两个属性:
value
:存储节点的值。
next
:指向下一个节点的指针。
2. 栈的实现
Stack
类用于实现栈数据结构。栈是一种后进先出(LIFO)的数据结构,支持以下操作:
push(value)
:将元素压入栈顶。
pop()
:移除并返回栈顶元素。
peek()
:返回栈顶元素但不移除它。
is_empty()
:检查栈是否为空。
3. push
方法
push
方法用于将元素压入栈顶。具体步骤如下:
- 创建一个新的
Node
对象,并将 value
赋值给它的 value
属性。
- 将新节点的
next
指针指向当前的栈顶节点。
- 将栈顶指针
top
更新为新节点。
4. pop
方法
pop
方法用于移除并返回栈顶元素。具体步骤如下:
- 检查栈是否为空。如果为空,抛出
IndexError
异常。
- 获取栈顶节点的
value
。
- 将栈顶指针
top
更新为下一个节点。
- 返回栈顶节点的
value
。
5. peek
方法
peek
方法用于返回栈顶元素但不移除它。具体步骤如下:
- 检查栈是否为空。如果为空,抛出
IndexError
异常。
- 返回栈顶节点的
value
。
6. is_empty
方法
is_empty
方法用于检查栈是否为空。如果栈顶指针 top
为 None
,则栈为空,返回 True
;否则返回 False
。
7. 复杂度分析
push
、pop
和 peek
操作的时间复杂度均为 O(1),因为它们只涉及对栈顶节点的操作。
- 空间复杂度为 O(n),其中 n 是栈中元素的数量。