返回
迂回取胜,答题大师教你秒解 11 年“陈年老题”
后端
2023-10-29 02:42:22
真是没想到,一道面试题居然从 11 年前就开始讨论了,而官方今年才表态。今天我们就来一起盘点一下这道面试题。
题目:
给定一个链表,每个节点包含一个整数。请编写一个函数,将链表中的所有偶数节点提取出来,形成一个新的链表。
要求:
- 时间复杂度:O(n)
- 空间复杂度:O(1)
解答:
这道题目的关键在于如何巧妙地遍历链表并同时提取偶数节点。我们可以利用两个指针,一个指向当前节点,另一个指向新链表的尾节点。
- 初始化两个指针:
curr
指向链表头节点,tail
指向新链表的尾节点(最初为nullptr
)。 - 遍历链表,如果
curr
指向的节点值是偶数,则将curr
指向的节点添加到新链表的尾部,并更新tail
指向。 - 将
curr
指向下一个节点,重复步骤 2 和 3,直到curr
指向nullptr
。
代码示例:
def extract_even_nodes(head):
"""
提取链表中的所有偶数节点。
参数:
head: 链表头节点
返回:
偶数节点组成的链表
"""
# 初始化指针
curr = head
tail = None
while curr:
# 如果当前节点值是偶数
if curr.val % 2 == 0:
# 将当前节点添加到新链表的尾部
if tail:
tail.next = curr
else:
# 如果新链表为空,则将当前节点设为头节点
head = curr
# 更新新链表的尾节点
tail = curr
# 移动到下一个节点
curr = curr.next
return head
面试技巧:
- 理解题目要求: 仔细阅读题目,确保理解所要解决的问题。
- 分步思考: 将问题分解为更小的步骤,逐步解决。
- 善用数据结构: 选择合适的辅助数据结构,如指针和链表,以有效地管理数据。
- 注重时间和空间复杂度: 考虑算法的时间和空间复杂度是否满足要求。
- 简洁明了: 使用清晰简洁的代码,易于理解和调试。
通过巧妙的解题思路和有效的面试技巧,我们可以轻松应对这道 11 年“陈年老题”。无论是在面试中还是在实际工作中,保持清晰的思维和灵活的解决问题能力都是至关重要的。