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

数据结构与算法——Java实现 10.习题——删除有序链表重复节点

所有无能为力的事情,我都在慢慢接受

                                                —— 24.9.22

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

给定一个已排序的链表的头 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

思路

给链表设置两个指针,因为链表已排序,比较两个指针指向的元素是否相等,如果两指针指向的元素相等,则删除指针2,指针1此时保持不变

指针1指向的元素不等于指针2指向的元素,则指针1,指针2同时向后移动一位

当指针2指向元素为null时,退出循环

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode deleteDuplicates(ListNode head) {if (head == null || head.next == null) {return head;}ListNode p1 = head;ListNode p2;while((p2 = p1.next)!=null){if(p2.val==p1.val){p1.next = p2.next;}else{p1 = p2;}}return head;}
}

方法2

递归函数负责返回:从当前节点开始,完成去重的链表

1.若当前节点与next重复,返回next节点

2.若当前节点与next不重复,返回当前节点,但next的值进行更新

递归函数返回的是每个结点的去重结果,递归到最深一层,将所有节点的重复结果都删去,剩下返回的是去重后的链表

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode deleteDuplicates(ListNode head) {if (head == null || head.next == null) {return head;}if (head.val == head.next.val) {return deleteDuplicates(head.next);}else{head.next = deleteDuplicates(head.next);return head;}}
}


http://www.mrgr.cn/news/33672.html

相关文章:

  • 深度学习神经网络创新点方向(具体)
  • 【Linux】自动化构建工具-make/Makefile
  • linux基础-完结(详讲补充)
  • L2 正则化
  • 博弈论(零和博弈)英文版题解
  • Trimble X12三维激光扫描仪正在改变游戏规则【上海沪敖3D】
  • Java编程规范
  • Python知识点:如何使用Python进行智能合约开发(Solidity、Web3.py)
  • 跟着chatgpt一起学|多模态入门
  • Junit4测试报错:java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter
  • 数字阅读步履蹒跚,阅文集团定位尴尬
  • 结合HashMap与Java 8的Function和Optional消除ifelse判断
  • idea2021git从dev分支合并到主分支master
  • Vue的指令v-model的原理
  • 反序列化- Jackson...
  • ComfyUI三个超实用插件,一定不要错过!
  • JavaEE: 创造无限连接——网络编程中的套接字
  • Python中的null是什么?
  • 梧桐数据库(WuTongDB):向量化查询优化器的技术细节介绍
  • 一行代码实现快速排序
  • OJ在线评测系统 后端开发数据库初始化工作 开发库表 建立数据库索引 Mybatis映射初始化接口开发
  • golang学习笔记2-语法要求,注释与代码风格
  • pycharm加载虚拟环境及运行代码
  • 【VUE3.0】动手做一套像素风的前端UI组件库---Radio
  • 模拟电路工程师面试题
  • Android——Application