zoukankan      html  css  js  c++  java
  • 如何在只给定单链表中某个结点的指针的情况下删除该结点

    【XM笔试】

    题目描述:

    假设给定链表 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 中指向第3个元素的指针,要求把结点3删除,删除后:1 -> 2 -> 4 -> 5 -> 6 -> 7

    解答:
    一般情况下,要删除一个单链表的结点,我们直接做法是找到这个结点的前驱,然后通过prev.next = p.next来实现对结点p的删除,对于本题,我们拿不到前驱结点。
    分两种情况,(1)如果这个结点是链表的尾巴结点,那么无法删除这个结点。
    (2)如果这个结点不是尾巴结点,我们从这个结点的next开始,总把后一个结点的data复制到当前结点,然后删除最后一个结点,这样就实现了删除当前结点。

    • 创建单链表
      在这里插入图片描述

    • 编写删除函数
      在这里插入图片描述

    • 测试
      在这里插入图片描述

    • 分析
      这个算法的缺点是没法删除最后一个元素,最差时间复杂度是在删除第一个元素的时候,为O(n),没有额外空间开销,所以空间复杂度是O(1)

    • 扩展思路:

    做完这道题之后我们想,如果只给单链表中的某个结点p(非空结点),如何在p之前插入一个结点呢。

    解答:

    解答很简单,我们先把新结点插入到p结点后面,然后通过交换数据即可。

  • 相关阅读:
    android布局几点随想
    android_handler(一)
    android surfaView surfaHolder video 播放
    java_synchronized 用法
    android_viewFlipper(一)
    android_handler(二)
    解析pdf文档 (lucene3.5)
    Lucene 搜索(小程序)(Lucene3.5)
    运算符重载(++,<<,>>Data类的重载)
    线程池小程序(Java)
  • 原文地址:https://www.cnblogs.com/duanming/p/11830257.html
Copyright © 2011-2022 走看看