leetcode做题笔记82删除排序链表中的重复元素 II

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。

思路一:模拟题意

cpp 复制代码
struct ListNode* deleteDuplicates(struct ListNode* head){
    if (head == NULL || head->next == NULL) return head;
    struct ListNode nhead = {NULL, 0};
    struct ListNode* p1 = head;
    struct ListNode* p2 = &nhead;
    int n,value;
    while (p1) {
        struct ListNode* tmp = p1;
        for (n = 0,value = p1->val; p1 != NULL && p1->val == value; ++n)
            p1 = p1->next;
        if (n == 1) {  
            p2->next = tmp;
            p2 = tmp;
        }
    }
    p2->next = NULL;
    return nhead.next;
}

分析:

本题将重复的元素全部删除,可以考虑新建一个链表,若有重复元素则不放入新链表中,最后输出新链表即可。链表操作需要用另一个链表记录原来位置,当n==1时令p2指向tmp,最后输出nhead

总结:

本题考察链表删除操作,即判断元素是否重复,若重复则不放入新链表中,最后返回即可

相关推荐
学逆向的8 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
jeo陽12 小时前
04-循环实战:素数、最大公约数、级数求和与枚举法
c语言·开发语言·数据结构
slandarer13 小时前
MATLAB | 趣味编程——动态字符串甜甜圈和爱心
数据结构·matlab·趣味编程
UIU11414 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
爱读书的小胖14 小时前
LeetCode 88. 合并两个有序数组 C 解题分析
c语言·数据结构·算法
inrichtt14 小时前
第七课时:STM32时钟系统揭秘:从零理解时钟树
c语言·数据结构·stm32·单片机·嵌入式硬件
xxwl58515 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法
Logic10117 小时前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
垆边人似月.18 小时前
移动长度 k 子串使字符串变成回文
数据结构·算法
David猪大卫18 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习