博客
关于我
154-删除链表中重复元素(只保留出现一次的元素)
阅读量:519 次
发布时间:2019-03-08

本文共 528 字,大约阅读时间需要 1 分钟。

要删除排序链表中重复数字的节点,可以使用两种方法:

方法一:哑节点法

  • 引入哑节点:创建一个虚拟节点 node,将其 next 指向原链表的头结点。这样处理起来对头节点的特殊情况更友好。

  • 定义指针:用 p 指针指向链表的头节点,用 q 指向虚拟节点 node

  • 遍历链表

    • pp.nextnull 时,终止循环。
    • 检查 pp.next 的值是否不同。如果不同,q 移动到 p,然后 p 移动到下一个节点。
    • 如果值相同,p 继续移动,直到找到最后一个值相同的节点。然后 q 的下一个指向 p 的下一个节点,p 跳到下一个节点。
  • 返回结果:返回虚拟节点 node 的下一个节点,即为处理后的链表头。

  • 这种方法通过一次遍历处理所有重复节点,适合处理连续重复的情况。

    方法二:递归法

  • 递归终止条件:如果当前节点或其下一个为 null,直接返回当前节点。

  • 递归判断

    • 如果当前节点和下一个节点的值不同,直接调用递归处理下一个节点。
    • 如果值相同,跳过所有连续相同的节点,调用递归处理剩余的节点。
  • 递归方法适合处理非连续重复节点,但在遇到多个连续重复时,需要多次跳过才能达到终止,增加了递归深度。

    两种方法各有优劣,选择哪种取决于具体需求和优化目标。

    转载地址:http://fiyiz.baihongyu.com/

    你可能感兴趣的文章
    Mysql-缓存
    查看>>
    09-【继承、抽象类】
    查看>>
    25-【JDBC】
    查看>>
    Struts2-从值栈获取list集合数据(三种方式)
    查看>>
    LeetCode 两数之和
    查看>>
    98-对选择排序算法的实现和分析
    查看>>
    101-浅谈指针
    查看>>
    134-C++学习第八弹(重载)
    查看>>
    154-删除链表中重复元素(只保留出现一次的元素)
    查看>>
    254-Redis(关于hiredis)
    查看>>
    286-Go语言的操作符
    查看>>
    LeetCode刷题记录12——232. Implement Queue using Stacks(easy)
    查看>>
    nginx刷新出现nginx404
    查看>>
    PAT
    查看>>
    vue-axios的总结及项目中的常见封装方法。
    查看>>
    单例模式的python实现
    查看>>
    【docker】开启remote api访问,并使用TLS加密
    查看>>
    MySQL 一些小知识
    查看>>
    JUC并发学习笔记
    查看>>
    第一章 FreeBSD之系统安装
    查看>>