zoukankan      html  css  js  c++  java
  • 哑元

    处理链表问题有时候会用到哑元。那么什么时候需要哑元什么时候可以不需要呢?
    当处理head节点和处理其余节点需要用到不同做法时(因为head前面没有节点),为了统一做法需要用到哑元。

    以链表节点顺序交换问题为例:
    链表节点顺序交换问题一般需要三个指针
    (1)两两交换问题
    24.两两交换链表中的节点
    模型:pre->l1->l2->rest (l1,l2为待交换的两个结点)
    很明显,交换头两个节点和交换其它相邻两个节点用到的方法是不同的,因而需要用到哑元。如果不用哑元而交换头两个节点又用相同方法,则由于待交换节点是从头两个节点开始的,而head之前又没有节点,那么pre就没有意义。
    (2)链表反转问题
    206.反转链表
    只需要将操作节点插入到head之前即可,根本不需要操作head,因此不需要用到哑元。

    总结上述问题也可以得到另一种角度的解释:当操作节点从head开始,而进行操作时又需要用到操作节点的前一个节点pre时,此时为了使pre有意义需要用到哑元。

  • 相关阅读:
    H5实现的时钟
    Hystrix 熔断机制原理
    Redis模块化基本介绍
    Redis Pipeline原理分析
    Redis事务原理分析
    Java NIO原理分析
    Java Reference 源码分析
    JDK AtomicInteger 源码分析
    Java 包装类笔记
    Spring Cache 笔记
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/13488339.html
Copyright © 2011-2022 走看看