# Python每日一练(20230412) 队列实现栈、二叉树序列化、交换链表节点

## 1. 用队列实现栈

• void push(int x) 将元素 x 压入栈顶。
• int pop() 移除并返回栈顶元素。
• int top() 返回栈顶元素。
• boolean empty() 如果栈是空的，返回 true ；否则，返回 false

• 你只能使用队列的基本操作 —— 也就是 push to backpeek/pop from frontsizeis empty 这些操作。
• 你所使用的语言也许不支持队列。 你可以使用 list （列表）或者 deque（双端队列）来模拟一个队列 , 只要是标准的队列操作即可。

["MyStack", "push", "push", "top", "pop", "empty"]

[[], [1], [2], [], [], []]

[null, null, null, 2, 2, false]

• 1 <= x <= 9
• 最多调用100pushpoptopempty
• 每次调用 poptop 都保证栈不为空

https://edu.csdn.net/practice/25389378

class MyStack:
def __init__(self):
"""
"""
self.queue = []
self.help = []
def push(self, x):
"""
Push element x onto stack.
"""
while len(self.queue) != 0:
self.help.append(self.queue.pop(0))
self.queue.append(x)
while len(self.help) > 0:
self.queue.append(self.help.pop(0))
def pop(self):
"""
Removes the element on top of the stack and returns that element.
"""
de = self.queue.pop(0)
return de
def top(self):
"""
Get the top element.
"""
de = self.queue[0]
return de
def empty(self) -> bool:
"""
Returns whether the stack is empty.
"""
if len(self.queue) == 0:
return True
return False
# %%
myStack = MyStack();
myStack.push(1)
myStack.push(2)
print(myStack.top())
print(myStack.pop())
print(myStack.empty())


2

2

False

## 2. 二叉树的序列化与反序列化

• 树中结点数在范围 [0, 104]
• -1000 <= Node.val <= 1000

https://edu.csdn.net/practice/25389379

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Codec:
def serialize(self, root):
"""Encodes a tree to a single string.
:type root: TreeNode
:rtype: str
"""
if root == None:
return "null,"
left_serialize = self.serialize(root.left)
right_serialize = self.serialize(root.right)
return str(root.val) + "," + left_serialize + right_serialize
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
def dfs(queue):
val = queue.popleft()
if val == "null":
return None
node = TreeNode(val)
node.left = dfs(queue)
node.right = dfs(queue)
return node
from collections import deque
queue = deque(data.split(","))
return dfs(queue)
# Your Codec object will be instantiated and called as such:
# codec = Codec()
# codec.deserialize(codec.serialize(root))

## 3. 两两交换链表中的节点

• 链表中节点的数目在范围 [0, 100]
• 0 <= Node.val <= 100

https://edu.csdn.net/practice/25389380

class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
def __init__(self):
def initList(self, data):
for i in data[1:]:
node = ListNode(i)
p.next = node
p = p.next
return r
ret = []
return
while node != None:
ret.append(node.val)
node = node.next
return ret
class Solution(object):
while p != None and p.next != None:
q, r = p.next, p.next.next
prev.next = q
q.next = p
p.next = r
prev = p
p = r
# %%
s = Solution()
print(l.convert_list(s.swapPairs(l1)))

[2, 1, 4, 3]

## 🌟 每日一练刷题专栏 🌟

👍 点赞，你的认可是我坚持的动力！

🌟 收藏，你的青睐是我努力的方向！

|
7天前
|
Python
Python实现数据结构（如：链表、栈、队列等）。
Python实现数据结构（如：链表、栈、队列等）。
260 0
|
7天前
|

17 1
|
7天前

26 1
|
7天前
|

21 2
|
7天前
|
Python 人工智能

54 1
|
7天前
|
Shell Unix Linux
Linux 终端命令之文件浏览(3) less
Linux 终端命令之文件浏览(3) less
35 0
|

＜LeetCode天梯＞Day024 删除链表中的节点 | 初级算法 | Python
＜LeetCode天梯＞Day024 删除链表中的节点 | 初级算法 | Python
119 0
|
1天前
|

Python编程实验六：面向对象应用
Python编程实验六：面向对象应用
15 1
|
1天前
|
Python
Python编程作业五：面向对象编程
Python编程作业五：面向对象编程
13 1
|
1天前
|

Python编程实验五：文件的读写操作
Python编程实验五：文件的读写操作
8 0