读书人

名企招聘经典口试编程题集锦[第21-30题

发布时间: 2013-03-06 16:20:31 作者: rapoo

名企招聘经典面试编程题集锦[第21-30题]
21、反转链表
定义一个函数,输入一个链表的结点,反转该链表并输出反转后链表的头结点。

int continumax(char *outputstr,char *intputstr){if(outputstr==NULL || intputstr==NULL || *intputstr=='\0')return -1;char* start = NULL;int length = 0;char* startHelper = NULL;int lengthHelper = 0;for (char* ch = intputstr;*ch!='\0';++ch){if(*ch<='9' && *ch >='0'){if(startHelper==NULL)startHelper = ch;++lengthHelper;}else{if(lengthHelper>length){start = startHelper;length = lengthHelper;}startHelper = NULL;lengthHelper = 0;}}if(start!=NULL){int i = 0;for(;i!=length;++i)*(outputstr+i) = *(start+i);*(outputstr+i)='\0';return length;}elsereturn -1;}

23、左旋转字符串

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。

如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。

24、整数的二进制表示中1的个数
输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

25、和为n的连续正数序列
输入一个正数n,输出所有和为n连续正数序列。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
分析:这是网易的一道面试题。

26、字符串的排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串
abc、acb、bac、bca、cab和cba。

分析:这是一道很好的考查对递归理解的编程题,
因此在过去一年中频繁出现在各大公司的面试、笔试题中。

27、调整数组顺序使奇数位于偶数前面

输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
所有偶数位于数组的后半部分。要求时间复杂度为O(n)。

28、赋值运算符题目:类CMyString的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);

private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。

29、用两个栈实现队列
用两个栈实现一个队列,队列声明如下,请实现它的两个函数appendTail和deleteHead,
分别完成在队列尾部插入结点和在队列头部删除结点的功能。
30、从尾到头输出链表

题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。

//如果可以修改链表,则先反转链表,再逐个输出;如果不可以,则借助于栈。void PrintFromTailToHead(listNode* head){if(head==NULL)return;stack<listNode*> helper;while(head!=NULL){helper.push(head);head = head->next;}while (!helper.empty()){cout<<helper.top()->value<<"  ";helper.pop();}cout<<endl;}


读书人网 >编程

热点推荐