前言:今天我的C++老师问了我一道,相当于脑筋急转弯的题目,感觉特别有趣,在这里给大家分享一下:

题目是这样的:问,给出一个单项链表,给出一个结点指针p指向链表的某一个结点(这个结点不是链表的最后结点),我们如何在时间复杂度为O(1)的情况下实现这种删除结点问题。

分析:我们知道我们要想删除一个链表中的某一个结点时,我们需要知道的条件是,这个结点的前驱结点,以便后面进行的连接活动。但是呢这里我们又不能通过head结点的遍历来实现,因为这样的话时间复杂度就变成了O(n),所以呢这里我们要突破常规的想法,来实现,给他来一个狸猫换太子。

程序:单链表的结构体

typedef int ElemType;

struct ListNode //结点类型

{

ElemType data;

ListNode *next;//类型的区别,指针指向的类型。

};

struct List   //链表类型

{

int  cursize;//不包括头结点!

ListNode *head;

};

通常情况下,我们给出结点指针p它指向23这结点,那么我们怎么将它删除呢?前提是时间复杂度为O(1),就是不能通过遍历来找到这个结点的前驱结点。

解决方案,我们可以将p指向的节点的下一个结点的data赋给p->data,然后呢我们将p指向结点的下一个结点删掉,这样就实现了狸猫换太子的目的了,我们不能只盯着前驱结点和该结点使劲,要学会变通。但是呢这也有一个问题,那就是,这种方法不适合最后一个结点的删除,有的同学可能想到直接free掉最后一个那不就行了。这样的话,指向34的那个结点的next就成了无效指针了。

正确的程序:

bool Erase(List &list,ListNode *p)

{

ListNode *r=p->next;//r指向p的下一个结点

int res=false;

if(NULL==r)//判断指针r

{

return res;

}

p->data=r->data;//值的偷换

r->next=p->next;

free(r);

list.cursize-=1;//有数据的结点个数见1

return ture

}

这里考察的是我们思维活性,不能一直处于思维定式的模式,那样的话我们就成了机器人了,闲暇之余给大家分享一下之歌狸猫换太子的有趣问题。

C/C++趣味代码-------狸猫换太子相关推荐

  1. Python趣味代码整合之提升学生编程兴趣

    这篇文章主要是整合一些趣味代码,一方面自己对这些内容比较感兴趣,另一方面希望这些代码能提升学生的编程兴趣,其主旨是代码能在我的电脑上运行并有些趣味.         参考资料:             ...

  2. python趣味代码(拜托了看看吧)

    我发现我最近掉粉了,这才发觉:完了完了,我忘了我已经这么多天没有更新,我的情绪也慢慢的慌起来了,心想:嗯不能再拖更了.然后马上上电脑打上3组趣味代码 import time words = input ...

  3. Python趣味代码

    趣味代码一:爱心 代码段: import time words = input('Please input the words you want to say!:') for item in word ...

  4. Python趣味代码整合之提升编程兴趣

    这篇文章主要是整合一些趣味代码,一方面自己对这些内容比较感兴趣,另一方面希望这些代码能提升大家的编程兴趣. 一.Python使用turtle绘制国旗 代码如下: 运行结果如下所示,它是动态绘制过程. ...

  5. python制作刮刮乐惊喜揭秘呀~【趣味代码】

    前言 大家早好.午好.晚好吖 ❤ ~ 在今天,在我百般无聊的时候,突然发现一存货 于是,我把从犄角旮旯里翻出来的代码一运行 嘿,真不错~那在这里就分享给大家 素材 首先我们准备一些图片以及一首下载好的 ...

  6. 趣味代码:水果动物派对

    看到网上有类似的代码截图,但是没有找到源码,只好自己写了一份~~~ 但是markdown不识别这些符号,所以,搞几张截图和一个识别这些符号的链接吧~~~ 感觉这个十分有趣,但是没啥技术含量. past ...

  7. 趣味代码之Java关机病毒

    一.程序员之DOS系统 1.输入win+r进入运行界面,输入cmd,如下图,回车进入DOS系统 2.输入命令shutdown -s - t 300,回车,电脑将在5分钟内后关闭 3.取消关机:shut ...

  8. 趣味代码 python画小猪佩奇

    # -*- coding:utf-8 -*-from turtle import*def nose(x,y):#鼻子penup()#提起笔goto(x,y)#定位pendown()#落笔,开始画set ...

  9. Python趣味代码(一):微信信息轰炸

    1.安装模块 首先需要在电脑上安装好pyautogui.pyperclip两个模块 # Windos系统安装命令 pip install pyautogui pip install pyperclip ...

最新文章

  1. linux expect 输入密码,shell脚本无密码登录 expect的使用方法详解
  2. 颜水成发了个「简单到令人尴尬」的视觉模型,证明Transformer威力源自其整体架构...
  3. codeforces水题100道 第五题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas (math)
  4. 【图算法】Dijkstra算法及变形
  5. html隐藏元素的方式,Web前端:CSS3——3种隐藏元素方法的区别
  6. Webserver推送技术
  7. 记一次SAP开发工程师给微软Azure报incident的体验
  8. coach和mentor,教练和导师的区别
  9. Xcode模拟器和真机生成的日志查看(ios必知必会)
  10. 获取字段 命名空间和类_系统架构之命名规范
  11. Android Studio 设置代码提示和代码自动补全快捷键
  12. c++ new delete
  13. H3C之虚拟路由器冗余协议(VRRP)的原理及应用
  14. 51单片机8位流水灯左移实现(比较简短)
  15. Oracle 建表语句,表结构操作sql
  16. sd卡计算机无法读取数据,电脑突然无法读取sd的起因分析sd卡无法读取怎么修复...
  17. MySql 根据身份证号来判别所属省份年龄及性别
  18. 新手如何做自媒体赚钱?天天看头条却不赚钱,这份资料对你有启发
  19. 基于A*搜索和深度优先搜索解迷宫问题
  20. python爬虫出现ProxyError: HTTPSConnectionPool错误

热门文章

  1. 成为职业游戏建模师有没有前景,未来自己该如何发展学习
  2. 计算机网络基础15:MikroTik路由器使用方法
  3. 人人网回归了!历史记录全保留!前任们的黑历史就要被重新翻开了
  4. 蓝桥杯备赛笔记-规律题
  5. 为啥现在还有人相信5G辐射危害健康?
  6. [5 算法] 31. 了解各种排序选择(partition,stable_partition,nth_element,partial_sort,sort,stable_sort)
  7. web开发学习,HTML标签语义化
  8. 2022年半导体硅片行业研究报告
  9. 儿童周成就任务全攻略
  10. OSChina 周日乱弹 —— 种族不同,禁止交往