微软的22道数据结构算法面试题(含答案)

本文列举了微软面试中常见的22道数据结构和算法题目,包括链表反转、二叉树广度优先遍历、字符串排列、整数转换等,并提供了详细的解题思路和代码实现。这些题目涵盖了链表操作、递归、队列、字符串处理、整数转换等多个方面,旨在考察候选人的编程基础和算法能力。
摘要由CSDN通过智能技术生成

微软的22道数据结构算法面试题(含答案)

  1、反转一个链表。循环算法。  
   
   
    1     List   reverse(List   l)   { 
    2     if(!l)   return   l;  
    3     list   cur   =   l.next;  
    4     list   pre   =   l;  
    5     list   tmp;  
    6     pre.next   =   null;  
    7     while   (   cur   )   { 
    8         tmp   =   cur;  
    9         cur   =   cur.next; 
  10         tmp.next   =   pre;  
  11         pre   =   tmp;  
  12     }  
  13     return   tmp;  
  14   }  
   
  2
、反转一个链表。递归算法。  
   
  1     List   resverse(list   l)   {  
  2     if(!l   ||   !l.next)   return   l; 
  3          
  4         List   n   =  reverse(l.next);  
  5         l.next.next   =   l;  
  6         l.next=null;  
  7     }  
  8     return   n;  
  9   }  
   
   
  3
、广度优先遍历二叉树。  
    1     void   BST(Tree   t)   {  
    2     Queue   q   =   new  Queue();  
    3     q.enque(t);  
    4     Tree   t   =   q.deque();     
    5     while(t)   {  
    6         System.out.println(t.value);  
    7         q.enque(t.left);  
    8         q.enque(t.right);  
    9         t   =   q.deque();  
  10     }  
  11   }  
  ----------------------  
    1class   Node   {  
    2     Tree   t;  
    3     Node   next;  
    4   }  
    5class   Queue   {  
    6     Node   head;  
    7     Node   tail;  
    8     public   void   enque(Tree   t){ 
    9         Node   n   =   new  Node();  
  10         n.t   =   t;  
  11         if(!tail){  
  12             tail   =   head  =   n;  
  13         }   else   {  
  14         tail.next   =   n;  
  15         tail   =   n;  
  16         }  
  17     }  
  18     public   Tree   deque()   {  
  19         if   (!head)   {  
  20                 return  null;  
  21         }   else   {  
  22         Node   n   =   head; 
  23         head   =   head.next;  
  24       return   n.t;  
  25         }  
  26}  

4、输出一个字符串所有排列。注意有重复字符。  
   
    1char[]   p;  
    2void   perm(char   s[],   int   i,  int   n){  
    3   int   j;  
    4   char   temp;  
    5   for(j=0;j<n;++j){  
    6     if(j!=0   &&   s[j]==s[j-1]); 
    7     elseif(s[j]!='@'){  
    8       p[i]=s[j];  
    9       s[j]='@';  
  10       if(i==n-1){  
  11         p[n]='\0';  
  12         printf("%s",   p);  
  13       }else{  

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值