1. 腾讯面试题:
用 c/c++ 反转单链表
- 输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
1
2
3
4
5
6
7
8
9
10
11
12
13
14struct ListNode *reverseList(struct ListNode* head) {
struct ListNode *newHead = NULL;
struct ListNode *node;
while (head != NULL) {
//1. 对之前的链表做头删
node = head;
head = head->next;
//2. 对新链表做头插
node->next = newHead;
newHead = node;
}
return newHead;
}
用 c/c++ 判断一棵树是否为平衡二叉树 (可以是一棵空树,左右子树的高度差不会超过 1 ,并且左右两棵子树都是一棵平衡二叉树)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16/**
* 判断一棵树是否是平衡二叉树
*/
template <class T>
bool isBalanceTree(TreeNode<T> *pNode){
// 可以是一棵空树,左右子树的高度差不会超过 1 ,并且左右两棵子树都是一棵平衡二叉树
if(!pNode)
return true;
// 左右子树的高度差不会超过 1
int left = getDepthTree(pNode->left);
int right = getDepthTree(pNode->right);
// 并且左右两棵子树都是一棵平衡二叉树
return abs(left-right) <= 1 && isBalanceTree(pNode->left) && isBalanceTree(pNode->right);
}
2. ArrayList 源码分析
重点:如果开发中涉及到模板类,声明和实现要写到同一个类中,hpp = h + cpp/c (编译)
具体代码请看:NDKPractice项目的cpp20
或者请看: jni/20.C++基础-实现Native层的ArrayList
java中ArrayList
知识点:
- 如果未指定容量大小的话,默认容量是
10
- 每次扩容都是扩充的原来的一半
oldCapacity + (oldCapacity >> 1);
代码:
1 |
|