一、非递归写法
void HeaderList::ReverseByIteration()
{
//迭代法---完成链表的转置
Node* pre = nullptr, * cur = head->next;
Node* tmp; //用来临时保存cur->next 防止断链
while (cur) //一直到cur走到nullptr的时候,就不需要继续再反转了()
{
tmp = cur->next;//保存,防止断链
cur->next = pre;//反转
pre = cur; cur = tmp;//移动指针,对下一组节点进行操作
}
head->next = pre;//更改dummyhead的指向
}
二、递归写法
void HeaderList::ReverseByRecursion()
{
SubReverse(nullptr, head->next);
}
void HeaderList::SubReverse(Node* pre, Node* cur)
{
if (cur == nullptr)
{
head->next = pre;//最后一步做好相应的连接
return;
}
Node* tmp = cur->next;//保存防止断链
cur->next = pre;
SubReverse(cur, tmp);
}