前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 83:删除排序链表中的重复元素

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

作者头像
五分钟学算法
发布2023-01-10 09:04:15
7410
发布2023-01-10 09:04:15
举报
文章被收录于专栏:五分钟学算法五分钟学算法

一、题目描述

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

二、题目解析

由于给定的链表是排好序的,因此重复的元素在链表中出现的位置是连续的,这个很关键。

因此我们只需要对链表进行一次遍历,就可以删除重复的元素。

具体操作如下:

1、设置一个指针 cur,指向链表的头节点,从链表的头节点开始访问每一个节点。

2、开始不断遍历链表。

3、在访问过程中,只要当前节点和当前节点的下一个节点有值,就不断访问下去

4、当前节点和当前节点的下一个节点有两种关系。

5、当前节点和当前节点的下一个节点相同,此时要删除重复元素, 由于链表已经是排序的,所以去重操作只需要跳过后面这个重复的节点就行。

6、当前节点和当前节点的下一个节点不相同,那么 cur 这个节点可以保留下来,继续访问后面的节点

三、参考代码

代码语言:javascript
复制
// LeetCode 100 题精讲:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
// 作者:程序员吴师兄
// https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        // 从链表的头节点开始访问每一个节点
        ListNode cur = head;

        // 在访问过程中,只要当前节点和当前节点的下一个节点有值,就不断访问下去
        while(cur != null && cur.next != null) {

            // 当前节点和当前节点的下一个节点有两种关系

            // 1、当前节点和当前节点的下一个节点相同,此时要删除重复元素
            // 由于链表已经是排序的,所以去重操作只需要跳过后面这个重复的节点就行
            if(cur.val == cur.next.val) {

                // 执行这个操作之后,cur.next 被跳过去了
                cur.next = cur.next.next;

            // 2、当前节点和当前节点的下一个节点不相同,那么 cur 这个节点可以保留下来,继续访问后面的节点
            } else {
                // 继续访问后面的节点
                cur = cur.next;
            }
        }

        // 返回链表的头节点就是结果
        return head;
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五分钟学算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目描述
  • 二、题目解析
  • 三、参考代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档