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

总结

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

相关推荐
IronMurphy12 分钟前
【算法五十六】84. 柱状图中最大的矩形
算法
fie888920 分钟前
matlab打靶法求解两点边值优化问题
开发语言·算法·matlab
酉鬼女又兒33 分钟前
零基础入门计算机网络:第一章概述全解(三种交换方式+八大性能指标+体系结构分层+十年考研真题精讲)
网络协议·计算机网络·考研·网络安全·职场和发展·计算机外设·求职招聘
不做无法实现的梦~36 分钟前
常见工程分析软件
stm32·嵌入式硬件·算法
郝学胜-神的一滴39 分钟前
Python 高级编程 018:深挖 super
开发语言·python·程序人生·软件构建
hetao173383742 分钟前
2026-05-28~06-02 hetao1733837 的刷题记录
c++·算法
ZhengEnCi42 分钟前
O08-单写线程与单读线程冲突分析
算法
仍然.1 小时前
算法题目---优先级队列
算法
一个爱编程的人1 小时前
图的相关概念
c++·算法·图论
迈巴赫车主1 小时前
贪心算法
算法·贪心算法