博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表逆转
阅读量:6933 次
发布时间:2019-06-27

本文共 798 字,大约阅读时间需要 2 分钟。

搜狐2013届校园招聘笔试题目是:分别用迭代和递归的方法对单链表进行逆转。听今天去华为参加机试的同学说,三道机试题目中也有一道同样的题目。由是自己动手写了写,代码如下:

        typedef struct LinkNode

        {

                 ElementType  data;

                 struct LinkNode *next;

         } node;

  代码1:迭代方法

node* rLink(node *head)

{
      if(head == NULL || head->next == NULL)
           return head;
      node *p1 = head;
      node *p2 = p1->next;
      node *p3 = p2->next;
      p1->next = NULL;
 
      while(p3 != NULL)
      {
           p2->next = p1;
           p1 = p2;
           p2 = p3;
           p3 = p3->next;
       }
       p2->next = p1;
       head = p2;

       return head;

}

代码2:递归方法

         

        p1 和p2指针分别指向当前递归子链表list1的第一个和第二结点。然后对以p2为首结点的子链表list2进行递归逆转;则p2节点将成为list2r逆转后的尾结点,而此时函数返回的头结点将是原list2的尾结点(如下图)。最后我们只要把p2的next指向p1就OK了。
                                               

 

        node* recursive_Link(node* head)

        {
              if(head == NULL || head->next == NULL)
                    return head;
              node* p1 = head;
              node* p2 = p1->next;  //p2其实记录的下一步递归过程后的尾结点
              head = recursive_Link(p2);
              p2->next = p1;
              p1->next = NULL;

               return head;

         }

转载地址:http://qngjl.baihongyu.com/

你可能感兴趣的文章
Ruby 2.2.0发布,支持增量式垃圾收集和符号的垃圾收集
查看>>
使用Rekit开发可扩展的前端应用
查看>>
android源码分析-深入MessageQueue
查看>>
苹果裁撤自动驾驶项目员工200余人
查看>>
红帽OpenShift总经理谈容器技术需要关注的方向
查看>>
组合使用Laravel和vfsStream测试文件上传
查看>>
微软发布Azure Application Insights for Node.js 1.0版本
查看>>
前端实例练习 - 动效按钮
查看>>
Java 20年:JVM虚拟化技术的发展
查看>>
Azure Service Fabric正式发布
查看>>
唐文:挖掘产品生命周期潜藏的商业价值——应用性能管理
查看>>
迅雷“星域”打通最后一公里重新定义CDN
查看>>
专访Matt Klein关于在Lyft构建Envoy的问答
查看>>
Intuit的Alex Balazs访谈
查看>>
Java社区领袖介绍平台支持选项
查看>>
JFinal整合Shiro(二)
查看>>
Concourse:可扩展的开源CI管道工具
查看>>
唯品会HDFS性能挑战和优化实践
查看>>
我所知道的flex布局 —— 上篇
查看>>
MongoDB主动撤回SSPL的开源许可申请
查看>>