Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93188
  • 博文数量: 16
  • 博客积分: 1466
  • 博客等级: 上尉
  • 技术积分: 187
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-27 11:48
文章分类

全部博文(16)

文章存档

2012年(1)

2011年(2)

2010年(5)

2008年(8)

我的朋友

分类: C/C++

2008-11-15 14:35:48

<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>其实我笔试实际写的并不是这样,只不过后来才想起来的,当时也是太浮噪了。所以总结一下这也是一个人的能力不足的体现,遇事不能冷静思考,没有良好的心理素质。以后应该好好培养自己这方面的能力。


阅读(4681) | 评论(0) | 转发(0) |
0

上一篇:C语言常用排序全解

下一篇:笔试后感受

给主人留下些什么吧!~~