题解 | 删除有序链表中重复的元素-II

删除有序链表中重复的元素-II

https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        // 创建哑节点,简化头节点处理
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* prev = dummy;
        ListNode* curr = head;
        
        while (curr != nullptr) {
            // 检查当前节点是否有重复
            if (curr->next != nullptr && curr->val == curr->next->val) {
                // 记录重复的值
                int duplicateValue = curr->val;
                // 跳过所有重复节点
                while (curr != nullptr && curr->val == duplicateValue) {
                    ListNode* temp = curr;
                    curr = curr->next;
                    delete temp; // 释放重复节点的内存
                }
                // 连接前一个节点到非重复节点
                prev->next = curr;
            } else {
                // 当前节点是唯一的,移动指针
                prev = curr;
                curr = curr->next;
            }
        }
        
        ListNode* result = dummy->next;
        delete dummy; // 释放哑节点内存
        return result;
    }
};

数据结构之链表 文章被收录于专栏

链表是数据结构中的重要内容,其编程问题围绕链表的特性(动态内存、指针关联、非连续存储等)展开,常见问题可归纳为以下几类,涵盖基础操作、算法技巧及边界场景处理: 一、基础操作类 二、查找与定位类 三、反转与逆序类 四、环相关问题 五、合并与拼接类 六、相交与公共节点类 七、去重与筛选类 八、排序类 九、特殊结构链表问题 十、边界与细节处理

全部评论

相关推荐

03-28 16:43
佛山大学 Java
java全国可飞:简历2.0,各位佬看看,这样可以吗查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务