• [转]有(无)头结点的单向链表的反转(只需要三个指针)


    /*定义数据结构类型,单向链表结构体包括数据部分和指针部分*/
    struct node 
    {
            unsigned int item;
            struct node * next;
    };
    /*不带头结点的反转函数,该函数采用三个结构体指针分别保存 前一节点 当前节点 后一节点 的值,将当前节点的指针域值直接指向前一节点,后一节点作为链表后面的引线,再将这三个指针往后移一位,递归进行前面的动作*/
    struct node * reverse(struct node *head)
    {
         if((head == NULL) || (head->next==NULL))  //链表为空,或只有一个结点(无需反转),直接返回
              return head;
         struct node *pre, *cur, *ne;
         pre = head;         //将前面几个节点的地址依次保存在新定义的结构体指针
         cur = head ->next;
         while(cur)
         {
              ne = cur->next;  //如果当前节点不为空,则将其指针域赋给ne指针
              cur->next = pre; //直接将两个指针的指向反转
              pre = cur;           //将当前节点赋给pre,将三个指针在链表中的位子都往后移一位
              cur = ne;     
          }
         head->next = NULL;//将原来的第一个节点的指针域赋为空,作为尾节点
         head = pre;            //将原来的尾节点变成新链表的第一个节点
         return head;
    }
    ******************************************************************
    /*带头结点的反转函数,该函数采用三个结构体指针分别保存 前一节点 当前节点 后一节点 的值,将当前节点的指针域值直接指向前一节点,后一节点作为链表后面的引线,再将这三个指针往后移一位,递归进行前面的动作;因为此链表为带头结点的链表,头结点的数据域并没有存放有效的数据,此函数与上一函数的区别是,需要保持头结点不动,只需要反转后面存有效数据的结点部分*/
    struct node * reverse(struct node *head)
    {
         if(!head || !head->next )  //判断链表是否为空或是否只有一个头节点
              return head;
         struct node *pre, *cur, *ne;
         pre = head->next;         //将前面几个节点的地址依次保存在新定义的结构体指针
         cur = pre ->next;
         while(cur)
         {
              ne = cur->next;  //如果当前节点不为空,则将其指针域赋给ne指针
              cur->next = pre; //直接将两个指针的指向反转
              pre = cur;           //将当前节点赋给pre,将三个指针在链表中的位子都往后移一位
              cur = ne;     
          }
         head->next ->next= NULL;//将原来的第一个节点的指针域赋为空,作为尾节点
         head->next = pre;            //将原来的尾节点变成新链表的第一个节点(头结点所指向的节点
         return head;
    }
  • 相关阅读:
    [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件
    fstab文件详解
    Struts2与Spring的Maven依赖冲突
    maven正确的集成命令-U -B 等
    CentOS6安装Jenkins
    CentOS6下Jenkins连接Git服务器出错的问题
    GitLab备份的创建与恢复
    开发App到上架应用市场需要经历什么?
    阅读笔记:A Few useful things to Know About machine Learning
    Feature Tools 简介
  • 原文地址:https://www.cnblogs.com/Griffin/p/3346147.html
Copyright © 2020-2023  润新知