欢迎来到我的Blogs,希望在这里能同大家一起分享知识所带给我们的快乐。

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

2005年微软笔试中的一道算法题

 明年即将毕业,于是参加了微软9月25号的第一轮笔试,因为复习的时间很短,加上那天头晕,题答的不理想。其中的一道算法题,当时并没有做出来。回来后不甘心,我又做了一遍,放到这上面来与大家一同分享。
      此题的具体描述我已经忘记了,意思就是说:给出一个已有的线性表,写出一个方法,通过传入*pHeader、*pStart参数后,在不需要分配内存,但可以自定义变量或指针的情况下,按照所给出的例子重新排列该表。实例如下:
      (1)N1->N2->N3->N4->N5->NULL   
       如果pHeader=N1,pStart=N3,得到:N3->N2->N1->N5->N4->NULL。
      (2)N1->N2->N3->NULL
       如果pHeader=pStart=N1,得到:N1->N3->N2->NULL。
       编写方法ReverseList(//变量...):
      
      下面是我编写的代码:
       结点的结构定义:

typedef char ElemType;
typedef 
struct node
{
    ElemType elem[
5];
    
struct node * next;
}
NODE;


       方法体定义:

NODE *ReverseList(NODE *header,NODE *start)
{
     NODE 
*p,*q,*h,*k;
     
if(header==NULL || start ==NULL)
     
{
               printf(
"Please Input the Right NODE\n");
               exit(
0);
     }

     
/*reverse the second list*/
     
if(start->next == NULL)
     
{
               h
=NULL;
     }

     
else
     
{
               h 
= start->next;
               p 
= h;
               q 
= p->next;
               
while(q!=NULL)
              
{
                      k 
= q->next;
                      q
->next = p;
                      p 
= q;
                      q 
= k;
               }

               h
->next = NULL;
               h 
= p;
     }

     
/*reverse the first list*/
     
if(header==start)
     
{
               header
->next = h;
     }

     
else
     
{
                p 
= header;
                q 
= p->next;
                
while(q!=start)
                
{
                      k 
= q->next;
                      q
->next = p;
                      p 
= q;
                      q 
= k;
                }

                header
->next= h;
                start
->next = p;
                header 
= start;
     }

     
return header;

}


     此方法已经在TurboC上运行过,没有问题。这里提供了源码的下载:SOLUTION.RAR

posted on 2005-09-30 22:54  未知先觉  阅读(348)  评论(0)    收藏  举报