剑指offer例题5—逆序输出链表

使用递归:

#include<iostream>
using namespace std;
struct ListNode
{
	int value;
	ListNode *next;
};
void Print(ListNode *list)
{
	if(list!=NULL)
	{
		if(list->next!=NULL)
		Print(list->next);
		cout<<list->value<<endl;
	}	
}
int main()
{
	int n;
	while(cin>>n)
	{
		ListNode *head=(ListNode*)malloc(sizeof(ListNode*));
		ListNode *list=head;
		while(n--)
		{
			int m;cin>>m;
			ListNode *newNode=(ListNode*)malloc(sizeof(ListNode*));
			newNode->value=m;
			list->next=newNode;
			list=list->next;
		}
		list->next=NULL;
		Print(head->next);
	}
	return 0;
}

 使用栈:

#include<iostream>
#include<stack>
using namespace std;
struct ListNode
{
	int value;
	ListNode *next;
};
void Print(ListNode *list)
{
	stack<ListNode*>s;
	while(list!=NULL)
	{
	   s.push(list);
	   list=list->next;
	}
	while(!s.empty())
	{
		cout<<s.top()->value<<endl;
		s.pop();
	}
}
int main()
{
	int n;
	while(cin>>n)
	{
		ListNode *head=(ListNode*)malloc(sizeof(ListNode*));
		ListNode *list=head;
		while(n--)
		{
			int m;cin>>m;
			ListNode *newNode=(ListNode*)malloc(sizeof(ListNode*));
			newNode->value=m;
			list->next=newNode;
			list=list->next;
		}
		list->next=NULL;
		Print(head->next);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/tgkx1054/p/2839380.html