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结点后面,然后通过交换数据即可。

  • 相关阅读:
    poj2356
    poj2021
    网络直销:贯通式电子商务营销
    网络营销趋同化时代到来
    一个睡五分钟等于六个钟头的方法
    张胜(帮别人名字作诗)
    我在阳光下向你表白
    李建逸(帮别人名字作诗)
    夜深,你的手机为谁而开
    杨英(帮别人名字作诗)
  • 原文地址:https://www.cnblogs.com/duanming/p/11830257.html
Copyright © 2011-2022 走看看