找工过程中碰到的笔试面试题整理(2)

继续我的找工笔试面试题整理。

1.获取字符串最长数字串

这个是baidu的一道笔试题,虽然简单,但是要当场写对还是要仔细点。

代码
int getlongestdigital(const char* inputstr,char* outputstr)
{
int start,length,longeststart,longest,offset;
start
= length = longest = longeststart = offset = 0;
while(*inputstr!='\0')
{
if(*inputstr>='0'&&*inputstr<='9')
{
if(length==0)
start
= offset;
length
++;
}
else
{
if(length>longest)
{
longest
= length;
longeststart
= start;
}
length
=0;
}
offset
++;
inputstr
++;
}
if(length>longest)
{
longest
= length;
longeststart
= start;
}
inputstr
-= offset;
for(int i=0;i<longest;i++)
{
outputstr[i]
= inputstr[i+longeststart];
}
outputstr[longest]
= '\0';
return longest;
}

2.完全二叉树的节点添加

这个也是常出现的题目,完全二叉树是笔试面试经常碰到的,最好要熟悉的它的各种操作。

 

 

代码
typedef struct TreeNode
{
int data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
void insertnode(TreeNode* root,TreeNode* newnode)
{
queue
<TreeNode*> nonvisit;
nonvisit.push(root);
while(!nonvisit.empty())
{
TreeNode
* pvisit = nonvisit.front();
nonvisit.pop();
if(pvisit->left==NULL)
{
pvisit
->left = newnode;
return;
}
nonvisit.push(pvisit
->left);
if(pvisit->right == NULL)
{
pvisit
->right = newnode;
return;
}
nonvisit.push(pvisit
->right);
}
}
3.链表反序

链表是又一个重点,熟悉一下它的各种操作吧

 

代码
void ReverseList(LinkNode **root)
{
LinkNode
*temp1 = (*root)->next;
if(temp1==NULL)
return;
LinkNode
*temp2;
(
*root)->next = NULL;
temp2
= temp1->next;
temp1
->next = *root;
*root = temp1;
while(temp2!=NULL)
{
temp1
= temp2;
temp2
= temp1->next;
temp1
->next = *root;
*root = temp1;
}
}

原文地址:https://www.cnblogs.com/absolute8511/p/1740674.html