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

总结

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

相关推荐
Nil2081 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing1 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
mmmmath_31 小时前
LeetCode.429.N叉树的层序遍历
数据结构·leetcode
loulanyue_2 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院2 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
suhan3 小时前
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
数据结构·后端·算法
姜鱼问生3 小时前
Docker Volume 备份与恢复实战:不停机迁移数据
后端·算法·架构
suhan3 小时前
【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)
数据结构·后端·算法
suhan3 小时前
【数据结构】三、栈和队列:3.链栈(链栈栈的初始化,判空,进栈,出栈,读取栈顶,链栈实例)
数据结构·后端·算法
大雄很用心3 小时前
如何理解时间复杂度与空间复杂度?| 面试刷题笔记02
算法