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

下面是关于“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日

相关文章

  • win7系统静态ip地址如何填写 win7系统静态ip填写方法图文详解

    Win7系统静态IP地址填写方法 在Win7系统中,如果需要设置静态IP地址,可以按照以下步骤进行操作: 打开控制面板:点击开始菜单,选择“控制面板”。 进入网络和共享中心:在控制面板中,选择“网络和 Internet”,然后点击“网络和共享中心”。 打开适配器设置:在网络和共享中心窗口中,点击左侧的“更改适配器设置”。 打开网络连接属性:在适配器设置窗口中…

    other 2023年7月30日
    00
  • Solr全文检索框架

    Solr全文检索框架的完整攻略 Solr是一个基于Lucene的全文检索框架,可以用于快速、准确地搜索和分析大量文本数据。在本文中,我们将提供一个完整的Solr全文检索框架攻略,包括Solr的基本概念、配置和使用方法,并提供两个示例说明。 Solr的基本概念 Solr的基本概念包括以下几个方面: 文档(Document):Solr中的文档是指需要进行检索的数…

    other 2023年5月5日
    00
  • Swift语言中的函数学习教程

    当涉及到Swift语言中的函数学习时,以下是一个完整的攻略,其中包含两个示例说明。 函数基础 函数是一段可重复使用的代码块,用于执行特定的任务。在Swift中,函数具有以下基本结构: func functionName(parameters) -> ReturnType { // 函数体 return value } func关键字用于声明函数。 fu…

    other 2023年8月10日
    00
  • 详谈Linux打包与压缩及tar命令

    详谈Linux打包与压缩及tar命令攻略 在Linux系统中,打包和压缩文件是常见的操作。tar命令是一个强大的工具,可以用于打包和压缩文件。下面是详细的攻略,包括tar命令的使用和示例说明。 打包文件 打包文件是将多个文件或目录组合成一个单独的文件。在Linux中,我们可以使用tar命令来打包文件。以下是打包文件的步骤: 打开终端并进入要打包的文件或目录所…

    other 2023年8月5日
    00
  • Vue自定义指令实现弹窗拖拽四边拉伸及对角线拉伸效果

    Vue自定义指令实现弹窗拖拽四边拉伸及对角线拉伸效果攻略 1. 创建自定义指令 首先,我们需要创建一个Vue自定义指令来实现弹窗的拖拽和拉伸功能。在Vue组件中,我们可以通过v-directive指令来实现这个功能。 Vue.directive(‘resizable’, { bind: function(el, binding, vnode) { // 在这…

    other 2023年9月6日
    00
  • 华为G7 plus怎么清理手机内存释放空间?

    华为G7 Plus清理手机内存释放空间攻略 清理手机内存可以帮助提高华为G7 Plus的性能和响应速度。以下是一份详细的攻略,教你如何清理手机内存并释放空间。 步骤一:关闭不必要的后台应用 打开华为G7 Plus的设置菜单。 滑动屏幕并选择“应用管理”或类似的选项。 在应用管理页面,你会看到正在运行的应用程序列表。 浏览列表,找到那些你不需要在后台运行的应用…

    other 2023年7月31日
    00
  • 将数据导入hive,将数据从hive导出

    将数据导入Hive,将数据从Hive导出的完整攻略 Hive是一个基于Hadoop的数据仓库工具,它可以将结构化数据映射到Hadoop的分布式文件系统上,并提供类SQL查询功能。本文将为您提供一份详细的将数据导入Hive,将数据从Hive导出的完整攻略,包括数据导入和导出的基本概念、使用方法和两个示例说明。 数据导入的基本概念 在Hive中,数据导入是指将数…

    other 2023年5月5日
    00
  • Linux中mkdir函数与Windows中_mkdir函数的区别

    Linux中的mkdir函数与Windows中的_mkdir函数虽然在功能上都是用于创建目录,但由于两种操作系统的文件系统和API实现方式不同,所以在使用时会有一些区别。 在Linux系统下,mkdir函数的原型如下: int mkdir(const char *pathname, mode_t mode); 其中,pathname参数表示新创建目录的路径,…

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