当前位置: 首页 > news >正文

数据结构与算法之链表: Leetcode 83. 删除排序链表中的重复元素 (Typescript版)

删除排序链表中的重复元素

  • https://leetcode.cn/problems/remove-duplicates-from-sorted-list/

描述

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

示例 1

输入:head = [1,1,2]
输出:[1,2]

示例 2

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序排列

算法实现

1 )方案 1

/*** Definition for singly-linked list.* class ListNode {*     val: number*     next: ListNode | null*     constructor(val?: number, next?: ListNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.next = (next===undefined ? null : next)*     }* }*/function deleteDuplicates(head: ListNode | null): ListNode | null {let p = head;while(p?.next) {// 检测相邻两位是否相等const isEqual = p.val === p.next.val // 相等则移动两位,否则正常移动一位isEqual ? (p.next = p.next.next) : (p = p.next)}// 原路返回headreturn head;
};
  • 解题思路

    • 链表是有序的,重复链表一定相邻
    • 遍历链表,如果发现当前元素和下个元素值相同,就删除下个元素值
    • 删除的方式就是当前元素直接链接下下个元素
  • 解题步骤

    • 遍历链表,如果发现当前元素和下个元素值相同就删除下个元素值
    • 遍历结束后,返回原链表头即可

2 )方案 2

/*** Definition for singly-linked list.* class ListNode {*     val: number*     next: ListNode | null*     constructor(val?: number, next?: ListNode | null) {*         this.val = (val===undefined ? 0 : val)*         this.next = (next===undefined ? null : next)*     }* }*/function deleteDuplicates(head: ListNode | null): ListNode | null {let cur = headlet next = curwhile(cur) {do {next = next.next} while(next && cur.val === next.val)cur.next = nextcur = cur.next}return head
};
  • 上述是官方示例程序
  • 这里while里面嵌套do while,这种写法让人眼前一亮
http://www.lryc.cn/news/64772.html

相关文章:

  • ubuntu16.04升级到20.04后报错 By not providing “FindEigen.cmake“
  • 设计模式——模板方法模式
  • 15 | Qt的自定义信号
  • 线性表,顺序表,链表
  • 洛谷 P2782 友好城市 线性DP 最长上升子序列 二分查找 lower_bound
  • easyexcel读取excel合并单元格数据
  • 2023哪款蓝牙耳机性价比高?200左右高性价比蓝牙耳机推荐
  • Java代码弱点与修复之——Masked Field(掩码字段)
  • C语言编程入门之刷题篇(C语言130题)(8)
  • QML动画类型总结
  • 编译一个魔兽世界开源服务端Windows需要安装什么环境
  • HTML5字体集合的实践经验
  • Mybatis 框架 ( 一 ) 基本步骤
  • 【华为OD机试真题】We Are A Team(C++javapython)100%通过率 超详细代码注释 代码优化
  • Oracle_Workflow_Builder工作流工具(一)
  • JavaWeb学习--RequestResponse
  • Linux cat 命令
  • 力扣sql中等篇练习(十四)
  • 什么是Spring FactoryBean?有什么作用?
  • Python List pop()方法
  • HJ51 输出单向链表中倒数第k个结点
  • c#笔记-内置类型
  • 功能齐全的 DIY ESP32 智能手表设计之原理图讲解一
  • 8年测试经验分享,15K的测试工程师需要掌握那些知识?
  • 利用通信基础设施提高电网的稳态稳定性(Matlab代码实现)
  • MySQL 一条SQL语句是如何执行的?
  • plt.imshow 全黑解决办法
  • 有趣的地理题
  • DD驱动鼠标键盘(驱动级别机器人使用鼠标键盘)
  • 每日学术速递4.30