摘要:
出题:给定两个单向链表的头结点,判断其是否有公共节点并确定第一个公共节点的索引;分析:由于是单向链表,所以每个节点有且仅有一个后续节点,所以只可能是Y型交叉(每条链表中的某个节点同时指向一个公共节点,并共享后面的所有节点)。首先计 算每条链表的长度,m和n(m>n);然后设定两个指针A和B分别指向两... 阅读全文
摘要:
出题:给定链表的头指针和一个节点指针,要求在O(1)的时间复杂度下删除该节点分析:如果需要删除的节点为A,其前序节点为A-,其后续节点为A+,所以删除A之后,需要使得A-的下一个节点就是A+,常规做法是设法得到A-的索引,需要 从链表头开始遍历所以时间复杂度为O(N),但实际情况是只要保证A-的下一... 阅读全文
摘要:
出题:输入一个数组,要求通过交换操作将奇数索引的元素调整到数组前半部分,偶数索引的元素调整到数组后半部分;分析:当然如果没有额外要求的话很容易实现,最好使用In-Place的实现策略;考虑插入排序的策略,不过这里的判断条件是遇到第一个奇数的时候才停止。时间复杂度为O(N^2);另外可以使用快速排序策... 阅读全文
摘要:
出题:要求判断二元树的深度(最长根节点到叶节点的路径);分析:二元递归不容易使用循环实现解题: 1 struct Node { 2 int value; 3 Node *left; 4 Node *right; 5 }; 6 /** 7 * 首先考虑... 阅读全文