def remove(self, value): """删除第一个匹配值的节点""" current = self.dummy_head.next while current != self.dummy_tail: if current.value == value: # 断开当前节点连接 current.prev.next = current.next current.next.prev = current.prev self.size -= 1 return True current = current.next return False
def __str__(self): """可视化链表结构""" res = [] current = self.dummy_head.next while current != self.dummy_tail: res.append(str(current.value)) current = current.next return " <-> ".join(res) if res else "Empty List"
# 递减单调栈 def next_greater_element(nums): stack = [] result = [-1] * len(nums) for i in range(len(nums)): while stack and nums[i] > nums[stack[-1]]: idx = stack.pop() result[idx] = nums[i] stack.append(i) return result
class MonotonicQueue: def __init__(self): self.q = deque() def push(self, n): while self.q and self.q[-1] < n: self.q.pop() self.q.append(n) def max(self): return self.q[0] def pop(self, n): if self.q[0] == n: self.q.popleft()
# 滑动窗口最大值示例 def max_sliding_window(nums, k): window = MonotonicQueue() res = [] for i in range(len(nums)): if i < k-1: window.push(nums[i]) else: window.push(nums[i]) res.append(window.max()) window.pop(nums[i-k+1]) return res
class TrieNode: def __init__(self): self.children = {} self.is_end = False
class Trie: def __init__(self): self.root = TrieNode() def insert(self, word): node = self.root for char in word: if char not in node.children: node.children[char] = TrieNode() node = node.children[char] node.is_end = True def search(self, word): node = self.root for char in word: if char not in node.children: return False node = node.children[char] return node.is_end
# DFS遍历 def dfs(graph, node, visited): if node not in visited: print(node) visited.add(node) for neighbor in graph[node]: dfs(graph, neighbor, visited)