华为思科面试题目(共3篇).doc
文本预览下载声明
华为思科面试题目(共3篇)
回目录
华为面试题:
怎么判断链表中是否有环?
bool CircleInList(Link* pHead)
{
if(pHead = = NULL || pHead-gt;next = = NULL)//无节点或只有一个节点并且无自环
return (false);
if(pHead-gt;next = = pHead)//自环
return (true);
Link *pTemp1 = pHead;//step 1
Link *pTemp = pHead-gt;next;//step 2
while(pTemp != pTemp1 amp;amp; pTemp != NULL amp;amp; pTemp-gt;next != NULL) {
pTemp1 = pTemp1-gt;next;
pTemp = pTemp-gt;next-gt;next;
}
if(pTemp = = pTemp1)
return (true);
return (false);
}
两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串
void insert(char *s, char *t, int i)
{
memcpy(amp;s[strlen(t)+i],amp;s[i],strlen(s)-i);
memcpy(amp;s[i],t,strlen(t));
s[strlen(s)+strlen(t)]=#39;\0#39;;
}
思科
1. 用宏定义写出swap(x,y)
#define swap(x, y)x = x + y;y = x - y;x = x - y;
2.数组a[N],存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:
int do_dup(int a[],int N)
3 一语句实现x是否为2的若干次幂的判断
int i = 512;
cout lt;lt; boolalpha lt;lt; ((i amp; (i - 1)) ? false : true) lt;lt; endl;
4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001
unsigned int intvert(unsigned int x,int p,int n){
unsigned int _t = 0;
unsigned int _a = 1;
for(int i = 0; i lt; n; ++i){
_t |= _a;
_a = _a lt;lt; 1;
}
_t = _t lt;lt; p;
x – _t;
return x;
}
C语言
1。编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。
char * search(char *cpSource, char ch)
{
char *cpTemp=NULL, *cpDest=NULL;
int iTemp, iCount=0;
while(*cpSource)
{
if(*cpSource == ch)
{
iTemp = 0;
cpTemp = cpSource;
while(*cpSource == ch)
++iTemp, ++cpSource;
if(iTemp gt; iCount)
iCount = iTemp, cpDest = cpTemp;
if(!*cpSource)
break;
}
++cpSource;
}
return cpDest;
}
2。请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。
int search(char *cpSource, int n, char ch)
{
int i;
for(i=0; ilt;n amp;amp; *(cpSource+i) != ch; ++i);
return i;
}
一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
将这个指针指向的next节点值copy到本节点,将next指向next-gt;next,并随后删除原next指向的节点。
#include lt;stdio.hgt;
void foo(int m, int n)
{
printf(quot;m=%d, n=%d\nquot;, m, n);
}
int main()
{
int b = 3;
显示全部