zoukankan      html  css  js  c++  java
  • [转]有(无)头结点的单向链表的反转(只需要三个指针)

    /*定义数据结构类型,单向链表结构体包括数据部分和指针部分*/
    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;
    }
  • 相关阅读:
    linux常用指令
    linux上部署应用
    ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):
    支持复制粘贴word图片的xhEditor编辑器
    支持复制粘贴word图片的CuteEditor编辑器
    支持复制粘贴word图片的TinyMCE编辑器
    支持复制粘贴word图片的eWebEditor编辑器
    支持复制粘贴word图片的wangEditor编辑器
    支持复制粘贴word图片的KindEditor编辑器
    支持复制粘贴word图片的CKEditor编辑器
  • 原文地址:https://www.cnblogs.com/Griffin/p/3346147.html
Copyright © 2011-2022 走看看