书上的这道题刚看到时冒出的想法就是递归打印,书上的解法还给出利用栈结构的方法,链表遍历一遍,数据保存在栈中。由于栈是后进先出,所以打印出来就是逆序的。递归本质上就是栈结构!
方法一:利用栈结构:
void PrintListReversingly(LinkedList* L)
{
stack<LinkedList*> nodes;
//数据入栈
LinkedList* pNode;
pNode = L->pNext;
while(pNode)
{
nodes.push(pNode);
pNode = pNode->pNext;
}
//打印
while(!nodes.empty())
{
pNode = nodes.top();
cout << pNode->value << " ";
nodes.pop();
}
cout << endl;
}方法二:递归打印,在打印当前结点之前打印出下一个结点
//如果头指针不是首结点,则跳过头指针,否则直接调用Print函数即可
void Print(LinkedList* pNode)
{
if(pNode != NULL)
{
if(pNode->pNext != NULL)
Print(pNode->pNext);
cout << pNode->value << " ";
}
}
void PrintListReversingly(LinkedList* L)
{
Print(L->pNext);
}
本文介绍了两种实现链表逆序打印的方法:一是使用栈结构,通过遍历链表并将节点地址压入栈中,再依次弹出实现逆序打印;二是采用递归方式,先递归到链表尾部再返回时进行打印。
995

被折叠的 条评论
为什么被折叠?



