打印链表时,我们不希望修改链表的结构,并且希望从尾到头打印其中的内容,这时很容易想到栈的结构。因为指针从头到尾依次遍历,把内容读到栈里,先进的内容会后出,符合从尾到头打印的顺序,而且没有改变栈的结构。实现如下,先随机生成一个有10个结点的链表,正向打印,最后调用PrintListReversingly_Iteratively()函数,反向打印。
#include <iostream>
#include <stdlib.h>
#include <stack>
#include <time.h>
#include <assert.h>
using namespace std;
typedef struct linkList
{
int m_nValue;
struct linkList *next;
}listNode,*linklistp;
linklistp insert_tail(linklistp head,linklistp newnode)
{
assert(newnode);
if(head == NULL)
{
head = newnode;
}
else
{
linklistp temp = head;
while(temp->next != NULL)
{
temp = temp->next;
}
newnode->next = NULL;
temp->next = newnode;
}
return head;
}
void output(linklistp head)
{
linklistp temp = head;
while(temp)
{
cout<<temp->m_nValue<<" ";
temp = temp->next;
}
cout<<endl;
}
void PrintListReversingly_Iteratively(listNode* pHead)
{
stack<listNode*> nodes;
listNode* pNode = pHead;
while(pNode != NULL)
{
nodes.push(pNode);
pNode = pNode->next;
}
while(!nodes.empty())
{
pNode = nodes.top();
cout<<pNode->m_nValue<<" ";
nodes.pop();
}
}
int main()
{
listNode* head;
head = NULL;
srand(time(NULL));
for(int i =0; i< 10; i++){
linklistp newnode = (linklistp)malloc(sizeof(linklistp));
newnode->m_nValue = rand()%100;
newnode->next = NULL;
head = insert_tail(head,newnode);
}
output(head);
PrintListReversingly_Iteratively(head);
}
本文介绍了如何使用栈从尾到头打印链表,避免修改链表结构。通过遍历链表并将节点值压入栈中,然后逐个弹出节点值,实现了逆序打印链表。

1395

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



