删除无序链表中的重复元素
时间: 2025-05-07 19:06:43 浏览: 14
### 如何在无序链表中移除重复节点
要从无序链表中删除重复的节点,可以采用哈希表来辅助完成操作。通过一次遍历整个链表,并借助哈希表记录已经访问过的值,能够高效地检测和移除重复项[^3]。
以下是基于 Python 的具体实现方式:
```python
class ListNode:
def __init__(self, value=0, next=None):
self.value = value
self.next = next
def remove_duplicates(head: ListNode) -> ListNode:
if not head or not head.next:
return head
seen_values = set() # 创建一个集合用于存储已见过的值
current_node = head # 当前处理的节点指针
prev_node = None # 上一有效节点指针
while current_node is not None:
if current_node.value in seen_values: # 如果当前值已经在集合中,则跳过该节点
prev_node.next = current_node.next
else: # 否则加入集合并更新上一有效节点
seen_values.add(current_node.value)
prev_node = current_node
current_node = current_node.next # 移动到下一节点
return head
```
上述代码定义了一个 `remove_duplicates` 函数,它接收链表头结点作为参数,并返回修改后的链表头结点。函数内部维护了一组变量:
- **seen_values**: 存储已经遇到的节点值,以便快速判断是否有重复。
- **current_node**: 表示当前正在检查的节点。
- **prev_node**: 记录最近未被删除的有效节点,方便调整链接关系。
当发现某个节点对应的值存在于 `seen_values` 中时,意味着它是重复项,因此将其从链表中断开;反之,将此新值添加至集合中继续前进[^4]。
#### 复杂度分析
时间复杂度为 O(n),因为只需扫描一遍列表即可完成任务。空间复杂度同样取决于输入规模 n 和可能存在的唯一键数量 k,在最坏情况下接近于线性增长即 O(k)。
阅读全文
相关推荐

















