力扣(LeetCode) 83: 删除排序链表中的重复元素 - 解法思路

问题概述

给定一个已排序的链表的头 head,删除所有重复的元素,使每个元素只出现一次。返回同样已排序的链表。

解法 1:迭代(推荐)

工作原理

遍历链表,通过更新 next 指针跳过重复节点来删除重复元素:

python 复制代码
class Solution:
    def deleteDuplicates(self, head):
        if not head:
            return head
        
        current = head
        
        while current and current.next:
            if current.val == current.next.val:
                # 跳过重复节点
                current.next = current.next.next
            else:
                # 移动到下一个节点
                current = current.next
        
        return head

复杂度分析

  • 时间复杂度: O(n) - 单次遍历链表
  • 空间复杂度: O(1) - 只使用常数额外空间

何时使用

  • 推荐 - 简单高效
  • 链表操作的标准方法
  • 处理所有边界情况,包括空链表

对比

方法 时间 空间 最佳适用
迭代 O(n) O(1) 大多数情况,最优解

总结

迭代方法通过一次遍历并跳过重复节点,高效地从已排序链表中删除重复元素。由于链表已排序,重复元素总是相邻的,这使得解决方案非常直接。

相关推荐
ZhengEnCi3 小时前
模型训练完整流程:从数据准备到模型上线的 10 个关键步骤(全文可跑)
后端·算法
weixin_307779134 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
nice_lcj5205 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
吞下星星的少年·-·6 小时前
Div.3 CF 1131A题(排序,模拟)
算法·模拟·排序
圣保罗的大教堂7 小时前
leetcode 453. 最小操作次数使数组元素相等 中等
leetcode
aichitang20247 小时前
代数拓扑学与现代前沿视角
考研·算法·数学建模·ai·拓扑学·高考
二本咕咕-机械转码7 小时前
FreeRTOS深入解析(一)_链表与并发保护——哨兵循环链表、排序键游标、临界区与关调度
单片机·算法·链表
-银雾鸢尾-7 小时前
两数之和-C++实现
c++·算法
j7~8 小时前
【动态规划算法专题】动态规划五部曲实战:泰波那契数、三步问题、最小花费爬楼梯
c++·算法·动态规划·数据结构与算法