单链表逆序

 

1.辅助指针

void ReverseList(LinkList* ListHead)

{

  if(NULL==ListHead || NULL==ListHead->next)

    return;

  LinkList* pPre=ListHead;

  LinkList* pCur=ListHead->next;

  LinkList* pNext=NULL;

  while(NULL!=pCur)

  {

    pNext=pCur->next;

    pCur->next=pPre;

    pPre=pCur;

    pCur=pNext;

  }

  ListHead->next=NULL;

  ListHead=pPre;

}

 

2.递归

void ReverseList(LinkedNode* pCur, LinkedNode* pHead)

{

  if(NULL==pCur || NULL==pCur->next)

    pHead=pCur;

  else

  {

    LinkedNode* pNext=pCur->next;

    ReverseList(pNext,pHead);

    pNext->next=pCur;

    pCur->next=NULL;

  }    

}

 

#从尾节点开始逆序;在最后1个节点时,进行了pCur->next非空的判断;并且每一次的转化都将上一个节点的next置为NULL;由于递归函数记录了节点的信息,并不会造成数据的丢失。

 

posted @ 2015-04-15 22:53  hy1hy  阅读(134)  评论(0编辑  收藏  举报