C++实现LeetCode(83.移除有序链表中的重复项)

yizhihongxing

下面是关于“C++实现LeetCode(83.移除有序链表中的重复项)”的完整攻略。

题目描述

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

示例1:

输入: 1->1->2
输出: 1->2

示例2:

输入: 1->1->2->3->3
输出: 1->2->3

解题思路

由于链表已经是有序的,所以我们只需要顺序遍历链表,在遍历的过程中判断哪些节点需要删除即可。

具体而言,我们定义一个指针 p,指向链表的当前节点。接着,我们开始循环,进行遍历。在每一个节点 p 身上,如果存在下一个节点,且下一个节点的值和当前节点的值相等,那么我们就需要将下一个节点删除。这里需要注意,删除操作需要保证链表中前后关系的规范,也就是说,需要让当前节点的下一个节点,指向下下一个节点。如果链表的头节点需要被删除,我们可以重新定义头节点为第二个节点。

解题代码

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if (head == NULL) {
            return head;
        }
        ListNode* p = head;
        while (p->next != NULL) {
            if (p->val == p->next->val) {
                ListNode* temp = p->next;
                p->next = p->next->next;
                delete temp;
            } else {
                p = p->next;
            }
        }
        return head;
    }
};

示例说明

我们可以通过两个不同的示例来说明这段代码的运行。

首先是下面这个示例:

输入:1 -> 1 -> 2 -> 3 -> 3
输出:1 -> 2 -> 3

在这个示例中,由于存在 1 和 3 两个数值出现了重复,因此我们需要删除第二个 1 和第二个 3。具体而言,我们可以在第一个 1 上,判断它的下一个节点是否为相同的数值,由于下一个节点是 1,因此需要删除下一个节点。此时链表变为 1 -> 2 -> 3 -> 3。我们继续判断第一个 3,它的下一个节点是 3,因此需要删除下一个节点。最终,返回的链表为 1 -> 2 -> 3。

接下来是另一个示例:

输入: 1->1->1->2->2->3->4->5->5->6
输出: 1->2->3->4->5->6

在这个示例中,由于存在多个相同的数值,我们需要删除它们,最终返回的是不包含重复节点的链表。在这个示例中,我们首先判断第一个 1,发现它的下一个节点也为 1,因此需要删除下一个节点。此时链表变为 1 -> 2 -> 2 -> 3 -> 4 -> 5 -> 5 -> 6。我们继续判断第一个 2,发现它的下一个节点为相同的数值,需要删除下一个节点。同样的方式,我们将相同的节点删除后,最终返回的链表为 1 -> 2 -> 3 -> 4 -> 5 -> 6。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现LeetCode(83.移除有序链表中的重复项) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • ios8固件下载 苹果iOS8 Beta测试版固件下载大全

    iOS 8固件下载攻略 苹果iOS 8是一个备受期待的操作系统版本,它带来了许多新功能和改进。如果你想尝试iOS 8的Beta测试版固件,下面是一个详细的攻略,教你如何下载iOS 8固件。 步骤一:注册为苹果开发者 要下载iOS 8的Beta测试版固件,你需要先注册为苹果开发者。以下是注册的步骤: 访问苹果开发者网站。 点击\”加入Apple开发者计划\”按…

    other 2023年8月4日
    00
  • 优酷会员怎么取消自动续费并解绑支付宝?

    以下是详细讲解“优酷会员怎么取消自动续费并解绑支付宝”的攻略: 一、取消自动续费 登录账号: 首先,需要登录你的优酷账号。 进入账户中心: 进入优酷账户中心,选择“会员中心”,找到你需要取消自动续费的会员类型。 取消自动续费: 在会员中心页面中,找到你需要取消自动续费的会员类型,点击会员卡片下方的“自动续费”,然后选择“关闭自动续费”即可取消自动续费。 示例…

    other 2023年6月27日
    00
  • android文件/文件夹选择器(支持多选操作) 已封装为lib库 …

    Android文件/文件夹选择器(支持多选操作) 已封装为lib库 在很多Android应用的开发过程中,需要让用户选择文件或文件夹,比如导入照片、音乐等。但是,在Android系统中,并没有官方提供好用的文件选择器。如果要自己写一个选择器,那么开发成本就会大大增加。因此,为了让开发者能够更方便地添加文件选择器功能,我们封装了一个Android文件/文件夹选…

    其他 2023年3月28日
    00
  • dht11温湿度传感器数据手册

    dht11温湿度传感器数据手册 介绍 dht11是一款集成了数字温湿度传感器的传感器模块。该传感器模块为数字信号输出,调用简单方便,价格也相对较为便宜,因此被广泛应用于各类温湿度测试场合。 产品规格 以下是dht11温湿度传感器的主要规格: 工作电压:3V~5.5V DC 工作电流:小于2.5mA 输出信号:数字信号 测量范围:湿度0~100%RH,温度-2…

    其他 2023年3月28日
    00
  • 新手入门必看:InDesign最常见问题22例整理大全

    新手入门必看:InDesign最常见问题22例整理大全攻略 1. 什么是InDesign? InDesign是一款由Adobe开发的专业排版软件,广泛用于制作印刷品、电子出版物和交互式文档。 2. 如何创建新文档? 要创建新文档,请按照以下步骤操作:- 打开InDesign软件。- 在菜单栏中选择“文件”>“新建”>“文档”。- 在弹出的对话框中…

    other 2023年8月5日
    00
  • 杀戮间2怎么架设正版服务器_杀戮间2架设正版服务器方法(推荐)

    下面是杀戮间2架设正版服务器的完整攻略: 准备工作 首先需要准备以下两个文件: 杀戮间2服务器主程序:在Steam上下载杀戮间2时,可以在游戏库 – 工具中找到。将其下载并解压到一个目录下,例如 D:\SkullGirls2Server 杀戮间2授权文件:这个文件需要从官方申请,一般会在几分钟内发送到你的邮箱。请将其保存到 D:\SkullGirls2Ser…

    other 2023年6月27日
    00
  • RxJava中多种场景的实现总结

    RxJava中多种场景的实现总结 介绍 RxJava是一种非常强大的响应式编程库,适用于多种场景。本文将总结RxJava在多种场景下的实际应用,并提供相应的示例代码。 场景一:网络请求数据 当我们使用网络请求数据时,需要处理许多问题,例如异步调用、数据缓存、错误处理、线程调度等。使用RxJava可以方便地解决这些问题。 示例代码 Observable.fro…

    other 2023年6月27日
    00
  • Android studio 广播的简单使用代码详解

    Android Studio 广播的简单使用代码详解攻略 广播(Broadcast)是 Android 中一种常见的通信机制,用于在应用程序内或应用程序之间传递消息。在 Android Studio 中,我们可以使用广播来实现不同组件之间的通信,例如发送系统事件、传递数据等。 下面是一个简单的示例,演示了如何在 Android Studio 中使用广播: 步…

    other 2023年9月5日
    00
合作推广
合作推广
分享本页
返回顶部