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。



浙公网安备 33010602011771号