编程案例自我总结(二)

16.链表环的入口:如果一个连表中包含环,求出环的入口节点(回归链表的地方)。

思路:1.确认环是否存在

            2.找到环的入口

在开头设置两个指针,速度不一,当速度快的节点追上了速度慢的节点,则表示该链表存在环;若慢的节点直到走到链表末端都没有被快的节点追上,则表示不存在环。

当确定存在环的时候,则应该判断环入口节点的位置 。假若该环存在n个节点,则让同在链表头的两个指针,选择一个先走n步,然后两个指针同时前进,可以在入口节点相遇。

在第一部分中,两个指针相遇的节点必定在环中,则可以在判断完链表环存在之后,直接从该点开始循环遍历直到再遇见这个点,以此计算环内节点n。


17.反转链表:输入链表头节点,反转链表并且输出翻转后的链表头节点。

    思路:循环,预存上一个点的地址,到下一个点处理的时候,将该地址存入该点的m_pNext地址下,同时将pPrev指向当前点,pNode指向下一个点,进入下一个循环。

    鲁棒性检测:1.输入的链表头指针为nullptr时或者整个链表只有一个节点时,程序立即崩溃。

                            2.翻转后的链表会出现断裂

                            3.返回的头节点不是原始链表的尾节点


18.排序链表合并:两个同为递增序列的链表,现要求将这两个链表合并。

鲁棒性:特殊输入可能会崩溃

思路:两个链表都设置各自的链表头指针,指向的内容进行比较,更小的接入链表,前一个链表节点的m_pNext指针指向更小点,以此循环,直到其中一条链表到尾节点。若某一链表到了末尾,则另外一个链表的剩余部分直接接入目标链表。

19.树的子结构:输入两棵二叉树,判断其中一棵是否为另外一棵的子结构。

鲁棒性:边界条件(空指针)

思路:1.先找子结构的根节点      2.找整支树

a.先对当前节点进行判断,若当前结点是相同的值,则进入子结构判断函数。

b.若不是本节点不是根节点则通过递归进入左枝或右枝查找。

c.在子结构判断函数中,递归方式返回与操作的结果,即同时判断左右子节点是否为相同的。当子结构已经到底,则返回true.


20.二叉树镜像:输入一个二叉树,要求输出它的镜像。

    要点:画图!!!

    思路:左右节点指针呼唤。

21.二叉树对称判断:判断当前二叉树是否一样

        思路:因为前序遍历是从左往右从上往下遍历,可以自定义一种同样自上而下、但是从右往左的遍历方式,如果对称,则这两种便利方式的结果会相同。对于缺少子节点的部分,空白的部分用nullptr指代。

每个节点都比对,相同数值或同为nullptr时,返回true;接下来进入递归,同时向下反向延伸(左侧节点向左右侧节点向右,左侧节点向右右侧节点向左)。


22.顺时针打印矩阵:从外向里顺时针打印矩阵中的每一个数据。

    重点:当成一圈一圈来看,每次都是从左上对角开始。若跑start圈之后,start*2要刚好小于行数或列数其中之一,则代表接下来要进行最后一圈。

    思路:打印时,因为往往会想到要四个方向都扫描一遍,但是当到达最后一圈时,存在只有一行、一列、甚至只有一个的情况,所以应该山区多余的扫描步骤。因此第二步需要判断终止行号大于起始行号,第三步需要判断终止列号大于起始列号,第四步则要求终止行号比起始行号至少大2.因此可以在开始圈打印之前判断一下接下来这个矩阵剩余部分的大小。

终止行/列号:rows(columns)-1-start

23.含Min()函数的:用min函数找到栈中最小的元素,push、pop、min的时间复杂度都是O(1)。

    思路:设置辅助栈,辅助栈栈顶的最小数值和将要传入数据栈的数据进行比对,当传入数值比最小数值更小,将同样的数值直接推入辅助栈栈顶;否则,将辅助栈栈顶相同的数字推入辅助栈。这样就保留了该最小数最开始进入数据栈的位置,当数据栈中数据删除时,可以更新数据栈中的最小值。

24.栈的压入和弹出序列:输入两个证书序列,第一个表示栈的压入顺序,判断另外一个序列是否为栈的弹出序列。

    思维陷阱:在压入的过程中,可以弹出。

思路:设置一个辅助栈,先比对栈顶和弹出序列的当前位置是否相同,如果相同,则弹出序列移到下一位,堆栈弹出栈顶;否则将推入序列逐位压入堆栈直到找到和该位置相等的数值,找到后弹出序列移到下一位,以此循环判断。

25.从上到下打印二叉树:同一层的从左到右打印出来。

    思路:每打印一个节点,将它的子节点压入队列。

延伸讨论:将打印的二叉树分行。

思路:将下一层的节点数统计下来,也保存当前本层剩余的节点数量。当本层剩余节点数量为0的时候,输出换行,且将下一行的节点数传输给本层剩余的节点数量。

再度延伸:之字形打印

    思路:双栈。轮流往两个栈里堆各自层次的子节点(刚好两层次的弹出顺序相反)。剩余思路与之前的相同。

26.二叉搜索树后序遍历:判断输入的是不是二叉搜索树的后序遍历

        二叉搜索树定义:左子树数值<根节点<右子树数值

    后序遍历:先叶后干,从左至右。因此根节点就在最后一位。用该根节点将序列分隔成左子树和右子树。在子树之中同样最后一位是根节点。因此很容易看出依然是采用递归的方法来判断。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容