剑指offer-基本思想学习(未包括代码)

Posted bluebluesea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-基本思想学习(未包括代码)相关的知识,希望对你有一定的参考价值。

转自:https://blog.csdn.net/Together_CZ/article/details/74906427

1.面试7:使用两个栈实现一个队列。

 //猛一看有点晕,实际上很简单。

 使用两个栈,一个是保存输入S1,另一个是输出S2;

当有新元素插入到队尾时,就将元素放入S1中;

当要删除队头元素的时候,若S2不为空,那么就弹S2的首元素;否则将S1中全部出栈压入S2中,再弹出,如果S1为空,那么就没有元素了。

 2.面试 13:在O(1)时间内删除链表节点

技术分享图片

那么就找到一个结点指针的下一个节点,并将元素赋值,并且删除下一个节点,并将指针指向下下一个节点。

如果是删除最后一个节点,那么就需要遍历了。

3.面试26:复制复杂链表

节点结构定义:

public static class ComplexListNode {
    int value;
    ComplexListNode next;//指向下一个节点
    ComplexListNode sibling;//有一个指向任意节点的指针。
}

//如果是使用普通复制的话,那么需要两个遍历的指针,并且时间复杂度是O(n^2)。

假设原始状态是这样的:

技术分享图片

第一步:在每一个节点后面加上一个复制的节点;第二步,每一个复制节点的sibling指针,就指向签一个节点的sibling节点的下一个节点,第三步,奇偶拆分。

技术分享图片

这个并不需要赋存,而且复杂度是O(n)的!!!

 4.面试题27:二叉搜索树与双向链表

 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

 //猛一看都懵了啊!完全不会啊!

 技术分享图片

因为二叉树中的节点包括指向左子树和右子树的指针,而且双向链表中有指向前一个节点和后一个节点的指针,那么是可以实现转化的。

只要将当前根节点的左指针指向,左子树中最大的节点;右指针指向右子树中最小的节点即可。

那么递归地去进行,先将左子树转化为双链表,将根节点地左子节点指针指向最后一个节点;然后去处理右子树,将根的右子节点指向右子树的第一个节点。

 

以上是关于剑指offer-基本思想学习(未包括代码)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

剑指Offer学习所有面试题汇总

[剑指Offer]快排

剑指offer42题

剑指offer第二版和专项突击版有啥区别

剑指Offer名企面试官精讲典型编程题pdf