力扣之有序链表去重

删除链表中的重复元素,重复元素保留一个

p1 p2

1 -> 1 -> 2 -> 3 -> 3 -> null

p1.val == p2.val 那么删除 p2,注意 p1 此时保持不变
p1 p2

1 -> 2 -> 3 -> 3 -> null

p1.val != p2.val 那么 p1,p2 向后移动
p1 p2

1 -> 2 -> 3 -> 3 -> null

p1 p2

1 -> 2 -> 3 -> 3 -> null

p1.val == p2.val 那么删除 p2
p1 p2

1 -> 2 -> 3 -> null

当 p2 == null 退出循环

代码

java 复制代码
public ListNode deleteDuplicates(ListNode head) {
    // 链表节点 < 2
    if (head == null || head.next == null) {
        return head;
    }
    // 链表节点 >= 2
    ListNode p1 = head;
    ListNode p2;
    while ((p2 = p1.next) != null) {
        if (p1.val == p2.val) {
            p1.next = p2.next;
        } else {
            p1 = p1.next;
        }
    }
    return head;
}

重复元素一个也不保留

p1 是待删除的上一个节点,每次循环对比 p2、p3 的值

  • 如果 p2 与 p3 的值重复,那么 p3 继续后移,直到找到与 p2 不重复的节点,p1 指向 p3 完成删除

  • 如果 p2 与 p3 的值不重复,p1,p2,p3 向后平移一位,继续上面的操作

  • p2 或 p3 为 null 退出循环

    • p2 为 null 的情况,比如链表为 1 1 1 null

p1 p2 p3

s, 1, 1, 1, 2, 3, null

p1 p2 p3

s, 1, 1, 1, 2, 3, null

p1 p2 p3

s, 1, 1, 1, 2, 3, null

p1 p3

s, 2, 3, null

p1 p2 p3

s, 2, 3, null

p1 p2 p3

s, 2, 3, null

代码

java 复制代码
public ListNode deleteDuplicates(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }

    ListNode s = new ListNode(-1, head);
    ListNode p1 = s;
    ListNode p2;
    ListNode p3;
    while ((p2 = p1.next) != null && (p3 = p2.next) != null) {
        if (p2.val == p3.val) {
            while ((p3 = p3.next) != null 
                   && p3.val == p2.val) {
            }
            p1.next = p3;
        } else {
            p1 = p1.next;
        }
    }
    return s.next;
}
相关推荐
小O的算法实验室5 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
Tbisnic6 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx6 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归7 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing8 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习8 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨9 小时前
基础数论总结
笔记·学习·算法
夜不会漫长10 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng11 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习
大熊背11 小时前
树莓派相机自动白平衡详解(四)
算法·树莓派·白平衡·isppipeline