• 单链表逆转


    搜狐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;
             }

  • 相关阅读:
    jupyter安装出现问题:安装后无法打开
    GitHub上传文件问题总结
    GitHub上传文件夹
    ELK 搭建
    mysql 开放远程连接权限连不上
    mysql linux下安装
    多个springboot项目部署到tomcat,Error deploying web application archive
    mysql 新增时,唯一索引冲突时更新
    日期计算
    mysql 忘记密码
  • 原文地址:https://www.cnblogs.com/juandx/p/4067089.html
Copyright © 2020-2023  润新知