1. 程式人生 > >逆置/反轉單鏈表(C語言)

逆置/反轉單鏈表(C語言)

1、逆置連結串列:前插法

void ReverseList(PSListNode* pHead)
{
  if (NULL == *pHead)
  {
     return;
  }
  else
  {
      //建立一個新的空連結串列,遍歷pHead指向的連結串列裡的所有節點,每找到一個,就前插到新連結串列裡
      PSListNode pNewHead = *pHead;
      *pHead = (*pHead)->pNextNode;
      //第一次前插到新連結串列裡的結點,是新連結串列的尾節點,所以要使它的下一個結點為空
      pNewHead->
pNextNode = NULL; while (NULL != *pHead) { PSListNode pNode = *pHead; *pHead = (*pHead)->pNextNode; pNode->pNextNode = pNewHead; pNewHead = pNode; } *pHead = pNewHead; } }

2、逆置連結串列:三指標法

void ReverseList(PSListNode* pHead)
{
    assert(pHead);
    if
((*pHead == NULL) || ((*pHead)->pNextNode) == NULL) { return; } else { PSListNode pPreNode = *pHead; PSListNode pCurNode = (*pHead)->pNextNode; PSListNode pOffNode = (*pHead)->pNextNode->pNextNode; PSListNode pNode = NULL; while
(1) { pCurNode->pNextNode = pPreNode; pPreNode->pNextNode = pNode; pNode = pPreNode; if (pOffNode == NULL) { break; } else { pPreNode = pCurNode; pCurNode = pOffNode; pOffNode = pOffNode->pNextNode; } } *pHead = pCurNode; } }