算法类:
有那些排序算法?不同排序算法的稳定性和时间复杂度和空间复杂度
写一个排序
快速排序算法 、写代码:快排时间复杂度(平均、最坏)、快排的思想,什么情况下要用什么排序算法、稳定性如何
手写归并排序
讲一下堆排序的过程
了解桶排序吗?讲一下
还有什么排序算法,插入排序如何改进为 nlogn的时间复杂度,什么排序算法效率最高呢
二分查找
二分查找与二叉搜索树
哈夫曼树,以及哈夫曼编码
树的广度优先遍历
广度优先遍历一个图、写一下代码
一致性哈希算法、
hash表与二叉树的区别
红黑树、口胡建树过程
红黑树介绍,加入一个结点时,它应该是红的还是黑的
跳表和红黑树的区别
b+树介绍,使用场景
b树和b+树、B、B+树的区别
分治思想
算法拓展类:
写反转链表
node *reverse(node *head)//链表的逆置 { node *next; node *prev = NULL; while (head != NULL) { next = head->next; head->next = prev; prev = head; head = next; } return prev; }
合并两个有序链表
已知一个节点,怎么在O(1)时间内将该节点从链表中删除(答了将它后面的节点的值赋给他,然后将它后面的节点删除)
怎么将一个二叉排序树转换成双链表
判断单链表中是否有环
bool IsLoop(node *head, node **start)//判断链表是否存在环形链表,start为回环开始节点的地址 { node *p1 = head, *p2 = head; if (head == NULL || head->next == NULL)//head为NULL或者链表为空时返回false { return false; } do { p1 = p1->next;//p1走一步 p2 = p2->next->next;//p2走两步 } while (p2 && p2->next && p1 != p2); if (p1 == p2) { *start = p1;//p1为回环开始节