只有一个指针(公),一个数据项(私),把头变成尾,尾变成头!
拜托!

解决方案 »

  1.   

    程序及测试:typedef struct DATA DATA;struct DATA 
    {
       int nData;
       DATA* pNext;
    };DATA* Invert(DATA* pHead)
    {
       DATA* pTmp = pHead;
       DATA* pInvertHead = pHead;
       DATA* pInvertNext = pHead;
       while(pTmp!=NULL)
       {
          pInvertNext = pInvertHead;
          pInvertHead = pTmp;
         
          pTmp = pTmp->pNext;     if(pInvertHead==pHead)
      {
      pInvertHead->pNext = NULL;
      }
      else
      {
      pInvertHead->pNext = pInvertNext;
      }
       }
       return pInvertHead;
    }
        
    void main(int arn, char* arv[])
    {
    DATA d1, d2, d3;
    d1.nData = 1;
    d1.pNext = &d2;
    d2.nData = 2;
    d2.pNext = &d3;
    d3.nData = 3;
    d3.pNext = NULL;
    DATA* pH = &d1;
    while(pH!=NULL)
    {
    printf("%d\n", pH->nData);
    pH = pH->pNext;
    } pH = &d1;
    pH = Invert(pH); while(pH!=NULL)
    {
    printf("%d\n", pH->nData);
    pH = pH->pNext;
    }}
      

  2.   

    以前做的一个链表类的成员函数//  将链表逆序存储(链表翻转)
    template<class T>
    void Sqlist<T>::reverse()
    {
             if(nLength<2)  // 如果链表为空或者只有一个结点时不作翻转
      return;
    Node *p,*q,*r; // 构造三个临时辅助结点
    p = pLast->next; //  p 指向尾结点的后继结点
    q = pHead->next; //  q 指向第一个有效结点
    r = q->next; //  r 指向q的后继结点
    pHead->next = pLast;  // 虚头结点指向尾结点
    pLast = q;     // 尾结点指向第一个有效结点
    for(int i=0;i<nLength;i++)
    {
    q->next = p; // q的后继结点改为p(后继指针指向前驱)
    p = q;     // 用p结点记下q结点
    q = r;     // q结点右移一个位置
    if(i!=nLength-1) //  r结点右移一个位置(最后一次不能右移)
      r = r->next;
    }
    }