力扣(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) 大多数情况,最优解

总结

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

相关推荐
三毛的二哥4 小时前
BEV:典型BEV算法总结
人工智能·算法·计算机视觉·3d
南宫萧幕5 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型
算法·机器学习·matlab·simulink·控制·pid
测试19986 小时前
2026最新软件测试面试八股文【附文档】
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
zmsofts6 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
故事和你916 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
我叫黑大帅6 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头7 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
skilllite作者7 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
M ? A7 小时前
Vue 动态组件在 React 中,VuReact 会如何实现?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
py有趣9 小时前
力扣热门100题之不同路径
算法·leetcode