递归反序链表

来源:互联网 发布:学汉语软件 编辑:程序博客网 时间:2024/06/03 21:37
//不太喜欢递归的方式去实现, 总觉得不如非递归安全.

//递归反序链表

int *p[10];     //包含指针的数组int (*p)[10];   //指向数组的指针p[0]居然是一个数组int[10], 着实难以理解struct stNode{  stNode(int n){    nValue = n;    pNext=NULL;  }  int nValue;  stNode* pNext;};//非递归stNode* Reverse1(stNode* pN){  if(pN == NULL|| pN->pNext == NULL){    return pN;  }  stNode* pPre = pN;  pN = pN->pNext;  stNode* pNext = pN->pNext;  pPre->pNext = NULL;  while(pN->pNext != NULL){    pN->pNext = pPre;    pPre = pN;    pN = pNext;    pNext = pN->pNext;  }  pN->pNext = pPre;  return pN;}//递归stNode* Reverse2(stNode* pN){  static stNode* pHead = pN;  static stNode* pNewHead = NULL;  if(pN==NULL){    ;  }else if(pN->pNext==NULL){    pNewHead = pN;  }else{    stNode* pNew = Reverse(pN->pNext);    pNew->pNext = pN;  }  if(pN == pHead){    pHead->pNext = NULL;    return pNewHead;  }  return pN;}int main() {  stNode* pHead = new stNode(1);  pHead->pNext = new stNode(2);  pHead->pNext->pNext = new stNode(3);  pHead->pNext->pNext->pNext = new stNode(4);  stNode* pResult = Reverse2(pHead);  return 0;}