2010年9月6日星期一

链表倒置

 /*************************************************************************************
   109   *
   110   *功能:对链表倒置
   111   *传入参数:链表的首节点
   112   *
   113   *************************************************************************************/
   114  void revList(NODE* pHead)
   115  {
   116      if (NULL==pHead) {      /*如果还没有创建链表,直接退出*/
   117          DEBUG("in revList, pHead is NULL\n");
   118          exit(-1);
   119      }
   120
   121      if (NULL==pHead->next|| NULL==pHead->next->next)    /*链表为空,或只有一个元素,直接
返回*/
   122      {
   123          return ;
   124      }
   125
   126      NODE* pData=pHead->next;        /*借助3个指针变量,遍历并倒置链表*/
   127      NODE* pDataNext=pData->next;
   128      NODE* pEnd=pDataNext->next;
   129      pData->next=NULL;
   130      do
   131      {
   132          pDataNext->next=pData;
   133          pData=pDataNext;
   134          pDataNext=pEnd;
   135          if(pEnd!=NULL)
   136          {
   137              pEnd=pEnd->next;
   138          }
   139      }while(pDataNext!=NULL);
   140  
   141      pHead->next=pData;  /*链表首元素(无数据)的指针执行倒置前链表的最后一个元素*/
   142  
   143      DEBUG("revList success!\n");    
   144  }

没有评论:

发表评论