输入是一个链表,需要从尾到头打印链表,如果说不改变链表的顺序,那么链表肯定是从头向尾遍历嘛,其实可以用一个栈的结果,将数据都压入栈中,压完了再输出就完成了从尾到头打印链表。
当然从尾到头打印链表前,先科普一个构建单链表的方法哈。两点节点不断加入
Node *creatList(Node *pHead)
{
Node *p1;
Node *p2;
p1 = p2 = (Node *)malloc(sizeof(Node)); //申请新节点
if (p1 == NULL || p2 == NULL)
{
printf("内存分配失败\n");
exit(0);
}
memset(p1, 0, sizeof(Node));
scanf("%d", &p1->element); //输入新节点
p1->next = NULL; //新节点的指针置为空
while (p1->element > 0) //输入的值大于0则继续,直到输入的值为负
{
if (pHead == NULL) //空表,接入表头
{
pHead = p1;
}
else
{
p2->next = p1; //非空表,接入表尾
}
p2 = p1;
p1 = (Node *)malloc(sizeof(Node)); //再重申请一个节点
if (p1 == NULL || p2 == NULL)
{
printf("内存分配失败\n");
exit(0);
}
memset(p1, 0, sizeof(Node));
scanf("%d", &p1->element);
p1->next = NULL;
}
printf("creatList函数执行,链表创建成功\n");
return pHead; //返回链表的头指针
}
构建好了,从尾到头打印。
void inorderprintList(Node *pHead)
{
stack<Node*> nodes;
Node* pNode = pHead;
while (pNode != NULL)
{
nodes.push(pNode);
pNode = pNode->next;
}
while (!nodes.empty())
{
pNode = nodes.top();
cout << pNode->element << " ";
nodes.pop();
}
}
当然,栈其实也就是一个递归的结构,也可以调用递归函数打印节点啦啦啦。