struct LinkNode
{
int m_data;
LinkNode *m_pNext;
};
LinkNode* re_list(LinkNode *node, LinkNode *next) //递归
{
if (next != NULL)
{
LinkNode *head = re_list(node->m_pNext, next->m_pNext);
next->m_pNext = node;
node->m_pNext = NULL;
return head;
}
else
{
return node;
}
}
void resever_list(LinkNode *&pHead)
{
if (pHead == NULL || pHead->m_pNext == NULL)
{
return ;
}
LinkNode *tmp = re_list(pHead, pHead->m_pNext);
pHead = tmp;
}
LinkNode* reverse(LinkNode *&pHead) //非递归
{
if (pHead == NULL || pHead->m_pNext == NULL)
{
return pHead;
}
LinkNode *p = pHead;
LinkNode *q = p->m_pNext;
LinkNode *pre = NULL;
while (p != NULL)
{
p->m_pNext = pre;
pre = p;
p = q;
if (q != NULL)
{
q = q->m_pNext;
}
}
pHead = pre;
return pHead;
}
非递归的指针指向变化示意图:
C++:单链表逆置的递归算法和非递归算法
最新推荐文章于 2021-05-21 08:44:35 发布