从头到尾打印链表

//6_从尾到头打印链表
/*c++ stl栈stack的头文件为: 
  #include <stack> 

c++ stl栈stack的成员函数介绍

操作 比较和分配堆栈

empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素*/

#include<iostream>
#include<stack>

using namespace std;
struct ListNode
{
	int m_nKey;
	ListNode *m_pNext;
};

ListNode *  CreateListNode(int vaule);
void ConnectListNodes(ListNode *pHead, ListNode *pLast);
void destroyNode(ListNode *pHead);
void PrintListReverse_Iteratively(ListNode *pHead);
void PrintListReverse_Recursively(ListNode *pHead);


int main()
{
	ListNode* pNode1 = CreateListNode(1);
	ListNode* pNode2 = CreateListNode(2);
	ListNode* pNode3 = CreateListNode(3);
	ListNode* pNode4 = CreateListNode(4);
	ListNode* pNode5 = CreateListNode(5);

	ConnectListNodes(pNode1, pNode2);
	ConnectListNodes(pNode2, pNode3);
	ConnectListNodes(pNode3, pNode4);
	ConnectListNodes(pNode4, pNode5);

	PrintListReverse_Iteratively(pNode1);
	cout << endl;
	PrintListReverse_Recursively(pNode1);
	destroyNode(pNode1);

	cin.get();
	return 0;
}

ListNode * CreateListNode(int vaule)
{
	ListNode *p_node = new ListNode();
	p_node->m_nKey = vaule;
	p_node->m_pNext = nullptr;

	return p_node;
}

void ConnectListNodes(ListNode *pHead, ListNode *pLast)
{
	if (pHead == nullptr)
	{
		cout << "Error to connect two nodes.\n";
		exit(1);
	}
	pHead->m_pNext = pLast;
}

void destroyNode(ListNode *pHead)
{
	ListNode* pNode = pHead;
	while (pNode != nullptr)
	{
		pHead = pHead->m_pNext;
		delete pNode;
		pNode = pHead;
	}
}


void PrintListReverse_Iteratively(ListNode *pHead)
{
	stack<ListNode *>nodes;
	ListNode *pNode = pHead;
	while (pNode!=nullptr)
	{
		nodes.push(pNode);
		pNode = pNode->m_pNext;
	}
	while (!nodes.empty())
	{
		pNode = nodes.top();
		cout << pNode->m_nKey << ' ';
		nodes.pop();
	}
}

void PrintListReverse_Recursively(ListNode *pHead)
{
	if (pHead!=nullptr)
	{
		if (pHead->m_pNext != nullptr)
		{
			PrintListReverse_Iteratively(pHead->m_pNext);
		}
		cout << pHead->m_nKey;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值