22. 链表中倒数第 K 个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路
设链表的长度为 N。设两个指针 P1 和 P2都在链表头节点,然后先让 P1向前 移动 K 个节点,则还有 N - K 个节点可以移动。此时让 P1 和 P2 同时移动,可以知道当 P1 移动到链表结尾时,P2 移动到 N - K 个节点处,该位置就是倒数第 K 个节点。(解释:就是让p1领先p2节点k个位置,然后两个节点一起以相同速度向前跑,最后当p2到终点的时候,p1节点就离终点距离为k)
23. 链表中环的入口结点
题目描述
一个链表中包含环,请找出该链表的环的入口结点。要求不能使用额外的空间
小疑问:笔者对这道题的解法还是存留些许疑问
详细参考:https://github.com/CyC2018/CS-Notes/blob/master/notes/剑指 offer 题解.md#23-链表中环的入口结点
24. 反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
解题思路:
先反转第一个节点;
然后后面的依次反转;
还有一种是迭代的方法:就是首和尾交换,正数第2和倒数第2交换,正数第3和倒数第3交换,…。
25. 合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
解释:上面的cur和head是一样的,把head的引用赋给了cur,改变cur也就相当于改变了head,所以最后返回head.next也是可以的
26. 树的子结构
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解答:
27. 二叉树的镜像
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
28 对称的二叉树
题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
29. 顺时针打印矩阵
30. 包含 min 函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。