<1> 最近参加了一次面试,让编写一个单链表操作,包括创建,删除,逆向什么的.其它的操作,这里就不写了这里把要求逆向的操作贴出来,供大家参考,同时也希望能提出意见。
<2>源程序
int converse(list *list)
{
list *tmp1,*tmp2,*tmp3;
tmp1=list;
if(tmp1->next!=null)//链表多于一个结点
{
tmp2=tmp1->next;//
if(tmp2->next!=null) //有至少三个有效节点
{ tmp3=tmp2->next; //其实每个程序都应该仔细处理“接口”或者说是“边界”的问题
tmp1->next=null;//主要设置第一个节点的next为空
tmp2->next=tmp1;
tmp1=tmp3; //tmp1和tmp2的next已经正确设置,但tmp3和tmp2还没有建立连接
}
else//有两个有效节点
{
tmp1->next=null;//主要设置第一个节点的next为空
tmp2->next=tmp1;
list->next=tmp2;
return 0;
}
}
else//链表只有一个结点即头结点,为空链表,
{
return -1;
}
while(tmp1->next!=null)//当前tmp1和tmp3指向同一位置,tmp2为已逆序的链表最前端
{
tmp3=tmp1->next;//tmp3移到下一个有效节点
tmp1->next=tmp2;//建立tmp1和tmp2之间的逆向关系
tmp2=tmp1; //tmp2再次指向已逆序链表的最前端
tmp1=tmp3; //tmp1和tmp3再次指向待逆序的节点
}
//当前tmp1和tmp3是链表的最后一个效节点
tmp1->next=tmp2; //正确建立tmp1和当前已逆序链表的最前端 tmp2的关系
list->next=tmp1; //建立头结点与tmp1的关系
return 0;
}
<3>其实我笔试实际写的并不是这样,只不过后来才想起来的,当时也是太浮噪了。所以总结一下这也是一个人的能力不足的体现,遇事不能冷静思考,没有良好的心理素质。以后应该好好培养自己这方面的能力。
阅读(4664) | 评论(0) | 转发(0) |