2013.4某搜索实习

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可以做,

posted @ 2013-04-20 17:33  Itachi7  阅读(170)  评论(0编辑  收藏  举报