1. 两个有序链表的合并(递归) PS:还有非递归算法
思路: 递归的思路主要是两个有序的链表,从头结点开始比较,大的作为合并后的头结点, 比如list1 和 list2, 而除去头结点后的用list1' 和 list2'表示,
若list1头结点大于list2的,则保留list1的头结点作为合并后链表的头结点, 而后用 list1'和 list2继续递归合并。代码如下:
Nod* meg(Nod* list1, Nod* list2) { Nod* temp = NULL; if (list1 == NULL&&list2 == NULL) { return NULL; } else if (list1 == NULL) { return list2; } else if (list2 == NULL) { return list1; } else { if (list1->val > list2->val) { temp = list1; temp->next = meg(list1->next,list2); } else { temp = list2; temp->next = meg(list1,list2->next); } return temp; } }
2. 字符串反序
感觉题目就是要写一个类似reverse()函数, 用两个指针指向字符串的头尾,没有相遇就swap,不知道还有没有更优的解法。
看面试官的感觉 似乎还有更优的。。
char* revs(char *str) { char* start = str; char* end = str + strlen(str); while (--end > start) { swap(*end,*start); ++start; } return str; }
3. static的用法
(1)局部静态变量
存储空间在全局静态区 只初始化一次
(2)外部静态变量/函数
被static修饰的变量或者函数只能被该文件引用 不能被其他文件引用
(3)静态数据成员/成员函数
修饰成员变量或成员函数的唯一性,用static修饰的代表不属于某一实例对象 而是属于整个类
当时没想到第二点。。只考虑了1,3点。。
4. 一个数组,其中只有两个数是相同的,如何找到这两个数?
当时就有点懵,似乎在编程之美见过,但是想不起来了,事后想想似乎hash可以做,