21.leetcode 备【蓝桥杯】 删除排序链表中的重复元素

一、题目

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

示例 1:

复制代码
输入:head = [1,1,2]
输出:[1,2]

示例 2:

复制代码
输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:

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

二、代码


复制代码
/**
 * 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) {
        //deleteDuplicates传入的是一个链表,返回一个链表
        
        //当 当前节点与下一个结点都不为空的时候,我们进行不断地比较
        //定义一个指针first指向第一个节点,若相邻结点相等的话,则将将头节点的下一个的下一个节点链在头节点的后面
        //若相邻结点不相等,则将first指针向后移动,
        
        
        ListNode first = head;
        while(first != null && first.next != null) {
            if(first.val == first.next.val){
                first.next = first.next.next;
            }else{
                first = first.next; 
            }
        }
        return head;
    }
}

三、反思

1.解题思路:

可大致上说是用了两个指针,定义一个新的指针first也指向头节点,这个是不断地向后遍历的,

当前的指针所指的结点值和当前指针的下一个节点的值,如果相等的话,则将跳过当前的指针(即当前节点的下一个节点的下一个节点 链在当前节点的后面),如果不相等,则将指向当前节点的指针向后移动(first= first.next),

不断向后遍历的终止条件是:当前节点为空且当前节点的下一个节点也为空,循环结束时返回的是头节点(代表这整个链表)

相关推荐
小欣加油7 分钟前
leetcode 912 排序数组(归并排序)
数据结构·c++·算法·leetcode·排序算法
山河君35 分钟前
webrtc之高通滤波——HighPassFilter源码及原理分析
算法·音视频·webrtc·信号处理
星辰大海的精灵36 分钟前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
data myth41 分钟前
力扣1210. 穿过迷宫的最少移动次数 详解
算法·leetcode·职场和发展
惯导马工1 小时前
【论文导读】AI-Assisted Fatigue and Stamina Control for Performance Sports on IMU-Gene
深度学习·算法
沐怡旸1 小时前
【算法--链表】109.有序链表转换二叉搜索树--通俗讲解
算法·面试
CoovallyAIHub1 小时前
推理提速一倍!SegDT:轻量化扩散 Transformer,医学图像分割的技术跨越
深度学习·算法·计算机视觉
CoovallyAIHub2 小时前
无人机方案如何让桥梁监测更安全、更智能?融合RTK与超高分辨率成像,优于毫米精度
深度学习·算法·计算机视觉
lingran__2 小时前
C语言制作扫雷游戏(拓展版赋源码)
c语言·算法·游戏
序属秋秋秋2 小时前
《C++进阶之STL》【set/map 使用介绍】
开发语言·c++·笔记·leetcode·stl·set·map