发几个我最近面试遇到的题目
1.
两个链表相交,有节点,确定节点【位置】。
2.
一棵二叉树,已知两个节点,确定它们的最近公共父节点。
3.
从鼠标点击开始,一直到窗口处理函数,中间比较详细的流程,要细致到涉及到了哪些API,和消息队列的从属关系,等。
知道多少说多少,我基本忘得差不多了。
4.
有两个数组,长度均为N,且都排好顺序【顺序方向一致,就是都是从小到大,或者都是从大到小】
例如
[1 2 3 4 6]
[0 5 7 8 9]
要找两个里面第N小的数字,这里就是4呗~要求代码~
5.
防止内存泄露的办法,防止栈内存溢出的办法,防止堆内存溢出的办法。
6.
其他的也不是记不住了,只是很难一句两句描述清楚。。。。 。。。。
就当散分了。
答案(搜集)
1. 分别计算两条链表长度,记为n1和m1,然后翻转第一个链表,再计算两个链表的长度,记为n2(=n1)和m2。然后根据他们关系,画一下图,可以定位出交点了。
假设两个链表的公共长度是c,则第一个链表中非公共的长度为n1-c,第二个链表中的非公共长度为n2-c;第一个链表翻转后,现在两条链表的公共长度成了n1-c(请画图来理解),所以此时第二条链表的长度就成了n1-c+n2-c,即n1-c+n2-c=m2,从而算出c。
2. 从根节点开始遍历,A和B分别为已知两节点的值,且A < B:
node = root;
while(node)
{
if(node->data > B)
node = node->right;
else if(node->data < A)
node = node->left;
else
{put node;break;}
}