zoukankan      html  css  js  c++  java
  • 链表逆置

    实现把单循环链表例置
    算法的思考过程:
    第一:需要保存临时数据的变量,不然无法完成倒置。
    第二:要完成倒置就需要遍列,又需要一个变量
    第三:用于得到最后的结果,这个暂时考虑也需要一个变量
    单个节点的倒置是本身,1->1
    两个节点的倒置1->2,可以参考两个数的交换,这就需要临时变量了
    p=head; 1
    q=head->next; 2
    s =p ; 1
    q->next = s;2->1
    p->next =q; 1->2->1
    三个节点。。。。。。。

    //这样得到了头指针
    *p=head;
    
    //2。完成遍列的代码 
    *q=head->next;
    while(q!=head){
       q=q->next;
    }
    
    //需要一个变量保存每次倒置的链表
    /*
    例如:1->2->1
    第一次:1
    第二次:2->1
    第三次:1->2->1
     这样的话,变量需要在遍列体中
    
    */
    
    *q=head->next;
    while(q!=head){
       s=p;    //这样我们先得到了初始的1 之后和第二,就需要把这个框架完善
       q=q->next;
    }

    在确定完方向后,得到下面的函数:

    ///////////////////////////////////////////////////////////////
    //    函 数 名 :invert
    //    函数功能 :实现把单循环链表例置
    //    处理说明 :1-->2->3->1   转成3->2->1->3//    返 回 值 :返回倒置后的链表指针
    //    参数说明 :*head 链表的头结点
    //    修改记录 :
    ///////////////////////////////////////////////////////////////
    LinkList *invert(const LinkList *head){
    
        //为了实现倒置,引入三个变量
        //*pResult用于倒置 *pNext 用于遍列链表  *pTemp 用于保存每次倒置后的指针
        LinkList *pResult,*pNext,*pTemp;
        pResult = head;       //1
        pNext = head->next; //2
    
        while(pNext!=head){
            pTemp=pResult;
            //printf("pTemp=pResult=%d
    ",pTemp->data);
            pResult=pNext;
            //printf("pResult=q=%d
    ",pResult->data);
            pNext = pNext->next;
            //printf("q->next=%d
    ",pNext->data);
            pResult->next=pTemp;
            //outList(pTemp);  输出函数
        }
        pNext->next=pResult; //1->3->2->1
    
        return pResult;
    
    }

    在写函数过程中,写变量名时,一定要有意义,明白每个变量的作用,不要一个变量多种用途,这样在写的过程中也比较明白。

  • 相关阅读:
    Git理解
    Java基础之四、字符和字符串 异常处理
    魔方第三层复原技巧
    Java基础之三、类的特性和接口
    Java基础之二、类的知识
    Java基础之一、入门知识
    UML之三、建模元素(2)
    看懂棒球-规则、数据
    【转载】自助终端设备安全剖析 (深度好文)
    CVE-2017-12615 Tomcat远程代码执行
  • 原文地址:https://www.cnblogs.com/sooner/p/3265091.html
Copyright © 2011-2022 走看看