【LeetCode每日一题】82. 删除排序链表中的重复元素 II

2024-1-15

82. 删除排序链表中的重复元素 II

在这里插入图片描述

思路:

  1. 创建一个虚拟节点 dummy 作为头节点的前置节点。
  2. 使用两个指针 precur 分别指向前一个非重复元素和当前节点。
  3. 遍历链表,当cur不为空时执行以下操作:
    • 如果 curcur 的下一个节点的值相等,则一直向后遍历找到下一个不相等的节点。
    • 如果 pre 的下一个节点就是 cur,说明当前节点没有重复,将 pre 移动到 cur 的位置。
    • 如果 pre 的下一个节点不是 cur,说明当前节点有重复,将 prenext 指针指向 cur 的下一个节点,实现删除操作。
  4. 继续遍历下一个节点,直到遍历完整个链表。
  5. 返回虚拟节点的下一个节点,即为去重后的链表
public ListNode deleteDuplicates2(ListNode head) {
   
    // 创建一个虚拟节点作为头节点的前置节点,方便处理头节点的删除情况
    ListNode dummy = new ListNode(0, head);
    // pre 节点用于记录上一个非重复元素的位置
    ListNode pre = dummy;
    // cur 节点用于遍历链表
    ListNode cur = head;
    
    // 遍历链表
    while (cur != null) {
   
        // 如果当前节点和下一个节点的值相等,则一直向后遍历找到下一个不相等的节点
        while (cur.next != null && cur.next.val == cur.val) {
   
            cur = cur.next;
        }
        
        // 如果 pre 的下一个节点就是 cur,说明当前节点没有重复,pre 移动到 cur 的位置
        if (pre.next == cur) {
   
            pre = cur;
        } else {
   
            // 如果 pre 的下一个节点不是 cur,说明当前节点有重复,将 pre 的 next 指针指向 cur 的下一个节点,实现删除操作
            pre.next = cur.next;
        }
        
        // 继续遍历下一个节点
        cur = cur.next;
    }
    
    // 返回虚拟节点的下一个节点,即为去重后的链表
    return dummy.next;
}

点击移步博客主页,欢迎光临~

偷cyk的图

最近更新

  1. TCP协议是安全的吗?

    2024-01-20 19:54:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-20 19:54:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-20 19:54:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-20 19:54:01       18 阅读

热门阅读

  1. docker安装mysql

    2024-01-20 19:54:01       34 阅读
  2. Day6 Qt

    Day6 Qt

    2024-01-20 19:54:01      38 阅读
  3. js算法买卖股票的最佳时机入门

    2024-01-20 19:54:01       40 阅读
  4. 数据预处理 matlab & 数据质量评估

    2024-01-20 19:54:01       41 阅读
  5. 评论功能的设计与实现

    2024-01-20 19:54:01       34 阅读
  6. ChatGPT 和文心一言哪个更好用?

    2024-01-20 19:54:01       36 阅读
  7. 如何防止服务器被暴力破解

    2024-01-20 19:54:01       44 阅读